You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2014/01/28 23:06:37 UTC

[1/4] git commit: updated refs/heads/4.3 to fd39184

Updated Branches:
  refs/heads/4.3 ce1b393f7 -> fd391845c


CLOUDSTACK-5796. [VMware] Size column is not getting updated in snapshot_store_ref table when a snapshot is backed up in secondary storage.
Calculate and update the size of a backed up snapshot. This snapshot size is in turn used to update the secondary_storage count for an account.
(cherry picked from commit e8ba2d08500b582a5e2e52e694fa6d9ec89d923b)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d4a3f7be
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d4a3f7be
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d4a3f7be

Branch: refs/heads/4.3
Commit: d4a3f7be8114f1b30374250236d82cff3571a6ae
Parents: ce1b393
Author: Likitha Shetty <li...@citrix.com>
Authored: Mon Jan 27 17:52:16 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Tue Jan 28 13:23:34 2014 -0800

----------------------------------------------------------------------
 .../resource/VmwareStorageProcessor.java        | 21 ++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d4a3f7be/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
index 2089c08..24cfe53 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -985,7 +985,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
         String backupUuid = UUID.randomUUID().toString();
         Pair<String, String[]> snapshotInfo = exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl,
                 installPath, backupUuid, workerVmName);
-        return new Ternary<String, String, String[]>(backupUuid + "/" + backupUuid, snapshotInfo.first(), snapshotInfo.second());
+        return new Ternary<String, String, String[]>(backupUuid, snapshotInfo.first(), snapshotInfo.second());
     }
 
     @Override
@@ -1067,8 +1067,25 @@ public class VmwareStorageProcessor implements StorageProcessor {
                     answer = new CopyCmdAnswer(details);
                 } else {
                     details = "Successfully backedUp the snapshot with Uuid: " + snapshotUuid + " to secondary storage.";
+
+                    // Get snapshot physical size
+                    long physicalSize = 0l;
+                    String secondaryMountPoint = mountService.getMountPoint(secondaryStorageUrl);
+                    String snapshotDir =  destSnapshot.getPath() + "/" + snapshotBackupUuid;
+                    File[] files = new File(secondaryMountPoint + "/" + snapshotDir).listFiles();
+                    if(files != null) {
+                        for(File file : files) {
+                            String fileName = file.getName();
+                            if(fileName.toLowerCase().startsWith(snapshotBackupUuid) && fileName.toLowerCase().endsWith(".vmdk")) {
+                                physicalSize = new File(secondaryMountPoint + "/" + snapshotDir + "/" + fileName).length();
+                                break;
+                            }
+                        }
+                    }
+
                     SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
-                    newSnapshot.setPath(destSnapshot.getPath() + "/" + snapshotBackupUuid);
+                    newSnapshot.setPath(snapshotDir + "/" + snapshotBackupUuid);
+                    newSnapshot.setPhysicalSize(physicalSize);
                     answer = new CopyCmdAnswer(newSnapshot);
                 }
             } finally {


[3/4] git commit: updated refs/heads/4.3 to fd39184

Posted by an...@apache.org.
CLOUDSTACK-5966 Added enable/disable monitoring service in global config
(cherry picked from commit 782265e713d5eaa41ca3d6040d8994639ddbce10)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/63e839c0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/63e839c0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/63e839c0

Branch: refs/heads/4.3
Commit: 63e839c0f8852d08ff8f08a47a45075ea8e93fb2
Parents: 3fa300b
Author: Jayapal <ja...@apache.org>
Authored: Tue Jan 28 19:20:44 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Tue Jan 28 13:31:37 2014 -0800

----------------------------------------------------------------------
 .../api/routing/NetworkElementCommand.java      |  2 ++
 .../virtualnetwork/VirtualRoutingResource.java  |  9 ++++--
 .../vmware/resource/VmwareResource.java         |  4 +++
 .../xen/resource/CitrixResourceBase.java        |  5 ++++
 server/src/com/cloud/configuration/Config.java  |  1 +
 .../VirtualNetworkApplianceManagerImpl.java     | 16 +++++++++--
 setup/db/db/schema-421to430.sql                 |  1 +
 .../config/opt/cloud/bin/monitor_service.sh     | 29 ++++++++++++++++++--
 8 files changed, 60 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java b/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java
index 843d213..23b75fd 100644
--- a/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java
+++ b/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java
@@ -34,6 +34,8 @@ public abstract class NetworkElementCommand extends Command {
     public static final String GUEST_BRIDGE = "guest.bridge";
     public static final String VPC_PRIVATE_GATEWAY = "vpc.gateway.private";
     public static final String FIREWALL_EGRESS_DEFAULT = "firewall.egress.default";
+    public static final String ROUTER_MONITORING_DISABLE = "router.monitor.disable";
+
 
 
     protected NetworkElementCommand() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index 0eac223..035a5b3 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -821,9 +821,12 @@ public class VirtualRoutingResource implements Manager {
         return new ConsoleProxyLoadAnswer(cmd, proxyVmId, proxyVmName, success, result);
     }
 
-    public String configureMonitor(final String routerIP, final String config) {
+    public String configureMonitor(final String routerIP, final String config, final String disable) {
 
         String args= " -c " + config;
+        if (disable != null) {
+            args = args + "-d";
+        }
         return  routerProxy("monitor_service.sh", routerIP, args);
     }
 
@@ -968,9 +971,11 @@ public class VirtualRoutingResource implements Manager {
     private Answer execute(SetMonitorServiceCommand cmd) {
 
         String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
+        String disable =  cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE);
         String config = cmd.getConfiguration();
 
-        String result = configureMonitor(routerIp, config);
+
+        String result = configureMonitor(routerIp, config, disable);
 
         if (result != null) {
             return new Answer(cmd, false, "SetMonitorServiceCommand failed");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 1d4c43f..41191f9 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -806,10 +806,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
 
         String controlIp = getRouterSshControlIp(cmd);
         String config = cmd.getConfiguration();
+        String disable =  cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE);
 
         String args = "";
 
         args += " -c " + config;
+        if (disable != null) {
+            args = args + " -d ";
+        }
 
         try {
             VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index aaa97bf..548223f 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -7585,6 +7585,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
         Connection conn = getConnection();
         String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
+        String disable =  cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE);
 
         if (routerIp == null) {
             return new Answer(cmd);
@@ -7592,6 +7593,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
         String args = "monitor_service.sh " + routerIp;
         args += " -c " + config;
+        if (disable != null) {
+            args += " -d ";
+        }
+
 
         String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args);
         if (result == null || result.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index d2713c0..da79995 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -105,6 +105,7 @@ public enum Config {
 	SecurityGroupDefaultAdding("Network", ManagementServer.class, Boolean.class, "network.securitygroups.defaultadding", "true", "If true, the user VM would be added to the default security group by default", null),
 
 	GuestOSNeedGatewayOnNonDefaultNetwork("Network", NetworkOrchestrationService.class, String.class, "network.dhcp.nondefaultnetwork.setgateway.guestos", "Windows", "The guest OS's name start with this fields would result in DHCP server response gateway information even when the network it's on is not default network. Names are separated by comma.", null),
+    EnableServiceMonitoring("Network", ManagementServer.class, Boolean.class, "network.router.enableserviceMonitoring", "false", "service monitoring in router enable/disable option, default false", null),
 
 	//VPN
 	RemoteAccessVpnPskLength("Network", AgentManager.class, Integer.class, "remote.access.vpn.psk.length", "24", "The length of the ipsec preshared key (minimum 8, maximum 256)", null),

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index af7ef83..c372e7b 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2223,12 +2223,20 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
 
             finalizeUserDataAndDhcpOnStart(cmds, router, provider, guestNetworkId);
         }
-        finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0));
+
+        String serviceMonitringSet = _configDao.getValue(Config.EnableServiceMonitoring.key());
+
+        if (serviceMonitringSet != null && serviceMonitringSet.equalsIgnoreCase("true")) {
+            finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0), true);
+         } else {
+            finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0), false);
+        }
+
 
         return true;
     }
 
-    private void finalizeMonitorServiceOnStrat(Commands cmds, VirtualMachineProfile profile, DomainRouterVO router, Provider provider, long networkId) {
+    private void finalizeMonitorServiceOnStrat(Commands cmds, VirtualMachineProfile profile, DomainRouterVO router, Provider provider, long networkId, Boolean add) {
 
         NetworkVO network = _networkDao.findById(networkId);
 
@@ -2270,6 +2278,10 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         command.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(networkId, router.getId()));
         command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
 
+        if (!add) {
+            command.setAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE, add.toString());
+        }
+
         cmds.addCommand("monitor", command);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index 4f8a52e..1ed6c6b 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -1089,4 +1089,5 @@ CREATE VIEW `cloud`.`user_vm_view` AS
            left join
         `cloud`.`user_vm_details` `custom_ram_size`  ON (((`custom_ram_size`.`vm_id` = `cloud`.`vm_instance`.`id`) and (`custom_ram_size`.`name` = 'memory')));
 
+INSERT INTO `cloud`.`configuration`(category, instance, component, name, value, description, default_value) VALUES ('NetworkManager', 'DEFAULT', 'management-server', 'network.router.EnableServiceMonitoring', 'false', 'service monitoring in router enable/disable option, default false', 'false') ON DUPLICATE KEY UPDATE category='NetworkManager';
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63e839c0/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh
----------------------------------------------------------------------
diff --git a/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh b/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh
index 51b6923..809c5b7 100755
--- a/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh
+++ b/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh
@@ -25,7 +25,7 @@ then
     exit 1
 fi
 
-set -x
+#set -x
 usage() {
   printf "Usage: %s: -c config string \n" $(basename $0) >&2
 }
@@ -58,13 +58,36 @@ done
 
 config=$2
 
+if [ -n "$3" ]
+then
 #delete cron job before updating config file
-crontab -l | grep -v  monitorServices.py | crontab -
+crontab -l|grep "monitorServices.py"
+
+if [ $? -eq 0 ]
+then
+    t=`date +%s`;
+    touch /tmp/monitor-$t.txt;
+    conf=/tmp/monitor-$t.txt
+    crontab -l >$conf
+    sed -i /#monitoringConfig/,+3d $conf
+    crontab $conf
+    rm $conf
+fi
+
+
+logger -t cloud "deleted crontab entry for monitoring services"
+unlock_exit 0 $lock $locked
+fi
 
 create_config $config
 
 #add cron job
-(crontab -l ;echo -e "SHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n */3 * * * * /usr/bin/python /root/monitorServices.py") | crontab -
+crontab -l|grep "monitorServices.py"
+if [ $? -ne 0 ]
+   then
+      (crontab -l ;echo -e "#monitoringConfig\nSHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n */3 * * * * /usr/bin/python /root/monitorServices.py") | crontab -
+      logger -t cloud "added crontab entry for monitoring services"
+   fi
 
 
 unlock_exit 0 $lock $locked


[4/4] git commit: updated refs/heads/4.3 to fd39184

Posted by an...@apache.org.
CLOUDSTACK-5971:Templates created from a snapshots can't be copied to
other zones.(cherry picked from commit 77aeb2871ba393adb311f590185f2a34055c1aa1)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fd391845
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fd391845
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fd391845

Branch: refs/heads/4.3
Commit: fd391845cf0ec81c272e7fcc62e6a153881bf527
Parents: 63e839c
Author: Min Chen <mi...@citrix.com>
Authored: Tue Jan 28 13:09:57 2014 -0800
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Tue Jan 28 13:32:11 2014 -0800

----------------------------------------------------------------------
 .../apache/cloudstack/storage/image/TemplateServiceImpl.java | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fd391845/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
index 7514f43..a649bb7 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
@@ -75,6 +75,7 @@ import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.TemplateType;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.VMTemplateStorageResourceAssoc;
@@ -736,6 +737,13 @@ public class TemplateServiceImpl implements TemplateService {
 
     @Override
     public AsyncCallFuture<TemplateApiResult> copyTemplate(TemplateInfo srcTemplate, DataStore destStore) {
+        // for vmware template, we need to check if ova packing is needed, since template created from snapshot does not have .ova file
+        // we invoke createEntityExtractURL to trigger ova packing. Ideally, we can directly use extractURL to pass to following createTemplate. 
+        // Need to understand what is the background to use two different urls for copy and extract.
+        if (srcTemplate.getFormat() == ImageFormat.OVA){
+            ImageStoreEntity tmpltStore = (ImageStoreEntity)srcTemplate.getDataStore();
+            tmpltStore.createEntityExtractUrl(srcTemplate.getInstallPath(), srcTemplate.getFormat(), srcTemplate);
+        }
         // generate a URL from source template ssvm to download to destination data store
         String url = generateCopyUrl(srcTemplate);
         if (url == null) {


[2/4] git commit: updated refs/heads/4.3 to fd39184

Posted by an...@apache.org.
CS-5950: Wrong storage tags are used for ISO deployed VMs.
(cherry picked from commit 1f4e2a51a42e566c11ab35cb38a81fd177feff16)

Signed-off-by: Animesh Chaturvedi <an...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3fa300b1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3fa300b1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3fa300b1

Branch: refs/heads/4.3
Commit: 3fa300b132fabd5a736d71a0509463d2e28f3537
Parents: d4a3f7b
Author: Sanjay Tripathi <sa...@citrix.com>
Authored: Mon Jan 27 14:18:53 2014 +0530
Committer: Animesh Chaturvedi <an...@apache.org>
Committed: Tue Jan 28 13:25:14 2014 -0800

----------------------------------------------------------------------
 .../src/com/cloud/deploy/DeploymentPlanningManagerImpl.java  | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3fa300b1/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index a41f5ee..21366f5 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -17,6 +17,7 @@
 package com.cloud.deploy;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -82,6 +83,7 @@ import com.cloud.org.Grouping;
 import com.cloud.resource.ResourceState;
 import com.cloud.storage.DiskOfferingVO;
 import com.cloud.storage.ScopeType;
+import com.cloud.storage.Storage;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.StoragePoolHostVO;
@@ -1216,8 +1218,12 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
             s_logger.debug("Calling StoragePoolAllocators to find suitable pools");
 
             DiskOfferingVO diskOffering = _diskOfferingDao.findById(toBeCreated.getDiskOfferingId());
-            DiskProfile diskProfile = new DiskProfile(toBeCreated, diskOffering, vmProfile.getHypervisorType());
 
+            if (vmProfile.getTemplate().getFormat() == Storage.ImageFormat.ISO && vmProfile.getServiceOffering().getTagsArray().length != 0) {
+                diskOffering.setTagsArray(Arrays.asList(vmProfile.getServiceOffering().getTagsArray()));
+            }
+
+            DiskProfile diskProfile = new DiskProfile(toBeCreated, diskOffering, vmProfile.getHypervisorType());
             boolean useLocalStorage = false;
             if (vmProfile.getType() != VirtualMachine.Type.User) {
                 String ssvmUseLocalStorage = _configDao.getValue(Config.SystemVMUseLocalStorage.key());