diff --git a/agent/pom.xml b/agent/pom.xml index aceb4d71dd3..0f44c1aa297 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -35,8 +35,6 @@ org.apache.cloudstack cloud-utils ${project.version} - tests - test diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index a26b4683a3a..4fdc91edef2 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -454,6 +454,10 @@ public class ApiConstants { public static final String GUEST_VM_CIDR = "guestvmcidr"; public static final String NETWORK_CIDR = "networkcidr"; public static final String RESERVED_IP_RANGE = "reservediprange"; + public static final String UCS_MANAGER_ID = "ucsmanagerid"; + public static final String UCS_PROFILE_DN = "profiledn"; + public static final String UCS_BLADE_DN = "bladedn"; + public static final String UCS_BLADE_ID = "bladeid"; public enum HostDetails { all, capacity, events, stats, min; diff --git a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java index 061351930da..f108a20e5b4 100644 --- a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java +++ b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java @@ -20,6 +20,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.springframework.stereotype.Component; import com.cloud.bridge.model.CloudStackUserVO; import com.cloud.bridge.util.EncryptionSecretKeyCheckerUtil; @@ -28,6 +29,7 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; +@Component @Local(value={CloudStackUserDao.class}) public class CloudStackUserDaoImpl extends GenericDaoBase implements CloudStackUserDao { public static final Logger logger = Logger.getLogger(CloudStackUserDaoImpl.class); diff --git a/client/pom.xml b/client/pom.xml index 8e1ad2bc064..e82660b8704 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -85,11 +85,6 @@ cloud-plugin-hypervisor-xen ${project.version} - - org.apache.cloudstack - cloud-plugin-hypervisor-ovm - ${project.version} - org.apache.cloudstack cloud-plugin-hypervisor-baremetal @@ -100,6 +95,11 @@ cloud-plugin-hypervisor-ucs ${project.version} + + org.apache.cloudstack + cloud-plugin-hypervisor-ovm + ${project.version} + org.apache.cloudstack cloud-plugin-hypervisor-kvm @@ -268,15 +268,9 @@ - - - - - - - - - + + + diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index 9061178e32a..456484eac4c 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -57,6 +57,9 @@ + + + + 3.2.4 + 0.4.9 diff --git a/server/pom.xml b/server/pom.xml index 0d7dada7bdc..b39f731b4c9 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -77,8 +77,6 @@ org.apache.cloudstack cloud-utils ${project.version} - tests - test org.reflections @@ -108,16 +106,40 @@ test/resources + + %regex[.*[0-9]*To[0-9]*.*Test.*] + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-testCompile + test-compile + + + **/com/cloud/upgrade/*.java + **/com/cloud/async/*.java + + + + testCompile + + + + org.apache.maven.plugins maven-surefire-plugin -Xmx1024m - com/cloud/upgrade/* + %regex[.*[0-9]*To[0-9]*.*Test.*] + com/cloud/upgrade/AdvanceZone223To224UpgradeTest + com/cloud/upgrade/AdvanceZone217To224UpgradeTest com/cloud/async/* com/cloud/cluster/* com/cloud/snapshot/* diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 66fb03b2a1c..22d823fb364 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -367,7 +367,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian if (router.getState() == State.Running) { try { - Commands cmds = new Commands(OnError.Stop); + Commands cmds = new Commands(OnError.Stop); UnPlugNicCommand unplugNicCmd = new UnPlugNicCommand(nic, vm.getName()); cmds.addCommand("unplugnic", unplugNicCmd); _agentMgr.send(dest.getHost().getId(), cmds); @@ -448,15 +448,20 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian SetupGuestNetworkCommand setupCmd = new SetupGuestNetworkCommand(dhcpRange, networkDomain, false, null, defaultDns1, defaultDns2, add, _itMgr.toNicTO(nicProfile, router.getHypervisorType())); - long guestVlanTag = Long.parseLong(network.getBroadcastUri().getHost()); + String brd = NetUtils.long2Ip(NetUtils.ip2Long(guestNic.getIp4Address()) | ~NetUtils.ip2Long(guestNic.getNetmask())); setupCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId())); setupCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(network.getId(), router.getId())); - setupCmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, String.valueOf(guestVlanTag)); + setupCmd.setAccessDetail(NetworkElementCommand.GUEST_NETWORK_GATEWAY, network.getGateway()); setupCmd.setAccessDetail(NetworkElementCommand.GUEST_BRIDGE, brd); setupCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + if (network.getBroadcastDomainType() == BroadcastDomainType.Vlan) { + long guestVlanTag = Long.parseLong(network.getBroadcastUri().getHost()); + setupCmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, String.valueOf(guestVlanTag)); + } + return setupCmd; } @@ -571,8 +576,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } Commands netUsagecmds = new Commands(OnError.Continue); - VpcVO vpc = _vpcDao.findById(router.getVpcId()); - + VpcVO vpc = _vpcDao.findById(router.getVpcId()); + //2) Plug the nics for (String vlanTag : nicsToPlug.keySet()) { PublicIpAddress ip = nicsToPlug.get(vlanTag); @@ -609,9 +614,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } //Create network usage commands. Send commands to router after IPAssoc NetworkUsageCommand netUsageCmd = new NetworkUsageCommand(router.getPrivateIpAddress(), router.getInstanceName(), true, defaultNic.getIp4Address(), vpc.getCidr()); - netUsagecmds.addCommand(netUsageCmd); - UserStatisticsVO stats = _userStatsDao.findBy(router.getAccountId(), router.getDataCenterId(), - publicNtwk.getId(), publicNic.getIp4Address(), router.getId(), router.getType().toString()); + netUsagecmds.addCommand(netUsageCmd); + UserStatisticsVO stats = _userStatsDao.findBy(router.getAccountId(), router.getDataCenterId(), + publicNtwk.getId(), publicNic.getIp4Address(), router.getId(), router.getType().toString()); if (stats == null) { stats = new UserStatisticsVO(router.getAccountId(), router.getDataCenterId(), publicNic.getIp4Address(), router.getId(), router.getType().toString(), publicNtwk.getId()); @@ -654,8 +659,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } }); if(result && netUsagecmds.size() > 0){ - //After successful ipassoc, send commands to router - sendCommandsToRouter(router, netUsagecmds); + //After successful ipassoc, send commands to router + sendCommandsToRouter(router, netUsagecmds); } return result; } @@ -820,7 +825,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian NetworkUsageCommand netUsageCmd = new NetworkUsageCommand(router.getPrivateIpAddress(), router.getInstanceName(), true, publicNic.getIp4Address(), vpc.getCidr()); usageCmds.add(netUsageCmd); UserStatisticsVO stats = _userStatsDao.findBy(router.getAccountId(), router.getDataCenterId(), - publicNtwk.getId(), publicNic.getIp4Address(), router.getId(), router.getType().toString()); + publicNtwk.getId(), publicNic.getIp4Address(), router.getId(), router.getType().toString()); if (stats == null) { stats = new UserStatisticsVO(router.getAccountId(), router.getDataCenterId(), publicNic.getIp4Address(), router.getId(), router.getType().toString(), publicNtwk.getId()); @@ -1068,7 +1073,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian s_logger.warn("Unable to apply StaticRoute, virtual router is not in the right state " + router.getState()); throw new ResourceUnavailableException("Unable to apply StaticRoute on the backend," + - " virtual router is not in the right state", DataCenter.class, router.getDataCenterId()); + " virtual router is not in the right state", DataCenter.class, router.getDataCenterId()); } } return result; diff --git a/server/test/com/cloud/upgrade/DbUpgrade22Test.java b/server/test/com/cloud/upgrade/DbUpgrade22Test.java index 2718ff23b06..e0db82db0bc 100644 --- a/server/test/com/cloud/upgrade/DbUpgrade22Test.java +++ b/server/test/com/cloud/upgrade/DbUpgrade22Test.java @@ -16,12 +16,14 @@ // under the License. package com.cloud.upgrade; +import org.junit.Ignore; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ AdvanceZone217To224UpgradeTest.class, AdvanceZone223To224UpgradeTest.class, PortForwarding218To224UpgradeTest.class, InstanceGroup218To224UpgradeTest.class, BasicZone218To224UpgradeTest.class, UsageEvents218To224UpgradeTest.class }) +@Ignore("maven-sure-fire discovered") public class DbUpgrade22Test { } diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 936a9c744a0..809e264d961 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -1655,4 +1655,26 @@ CREATE TABLE `cloud`.`baremetal_pxe_devices` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `cloud`.`ucs_blade` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `uuid` varchar(40) UNIQUE, + `ucs_manager_id` bigint unsigned NOT NULL, + `host_id` bigint unsigned DEFAULT NULL, + `dn` varchar(512) NOT NULL, + `profile_dn` varchar(512) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `cloud`.`ucs_manager` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `uuid` varchar(40) UNIQUE, + `zone_id` bigint unsigned NOT NULL, + `name` varchar(128) DEFAULT NULL, + `url` varchar(255) NOT NULL, + `username` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + SET foreign_key_checks = 1; diff --git a/tools/appliance/build.sh b/tools/appliance/build.sh index f0ac377a62b..caa380565fe 100644 --- a/tools/appliance/build.sh +++ b/tools/appliance/build.sh @@ -17,7 +17,6 @@ # under the License. set -x -set -e appliance="systemvmtemplate" build_date=`date +%Y-%m-%d` @@ -43,6 +42,14 @@ machine_uuid=`vboxmanage showvminfo $appliance | grep UUID | head -1 | awk '{pri hdd_uuid=`vboxmanage showvminfo $appliance | grep vdi | head -1 | awk '{print $8}' | cut -d ')' -f 1` hdd_path=`vboxmanage list hdds | grep $appliance | grep vdi | cut -c 14-` +# Remove any shared folder +shared_folders=`vboxmanage showvminfo $appliance | grep Name | grep Host` +while [ "$shared_folders" != "" ] +do + vboxmanage sharedfolder remove systemvmtemplate --name "`echo $shared_folders | head -1 | cut -c 8- | cut -d \' -f 1`" + shared_folders=`vboxmanage showvminfo $appliance | grep Name | grep Host` +done + # Compact the virtual hdd vboxmanage modifyhd $hdd_uuid --compact @@ -50,9 +57,14 @@ vboxmanage modifyhd $hdd_uuid --compact rm -fr dist *.ova *.vhd *.vdi *.qcow* *.bz2 mkdir dist +# Exit shell if exporting fails for any format +set -e + # Export for Xen -vboxmanage internalcommands converttoraw "$hdd_path" raw.img -vhd-util convert -s 0 -t 1 -i raw.img -o $appliance-$build_date-$branch-xen.vhd +vboxmanage internalcommands converttoraw "$hdd_path" img.raw +faketime '2010-01-01' vhd-util convert -s 0 -t 1 -i img.raw -o stagefixed.vhd +faketime '2010-01-01' vhd-util convert -s 1 -t 2 -i stagefixed.vhd -o $appliance-$build_date-$branch-xen.vhd +rm *.bak bzip2 $appliance-$build_date-$branch-xen.vhd echo "$appliance exported for Xen: dist/$appliance-$build_date-$branch-xen.vhd.bz2" diff --git a/tools/appliance/definitions/systemvmtemplate/postinstall.sh b/tools/appliance/definitions/systemvmtemplate/postinstall.sh index 268379c1759..dd07e6ebc97 100644 --- a/tools/appliance/definitions/systemvmtemplate/postinstall.sh +++ b/tools/appliance/definitions/systemvmtemplate/postinstall.sh @@ -27,7 +27,8 @@ install_packages() { # Basic packages apt-get --no-install-recommends -q -y --force-yes install rsyslog logrotate cron chkconfig insserv net-tools ifupdown vim-tiny netbase iptables - apt-get --no-install-recommends -q -y --force-yes install openssh-server openssl grub-legacy e2fsprogs dhcp3-client tcpdump socat wget + apt-get --no-install-recommends -q -y --force-yes install openssh-server openssl e2fsprogs dhcp3-client tcpdump socat wget + # apt-get --no-install-recommends -q -y --force-yes install grub-legacy apt-get --no-install-recommends -q -y --force-yes install python bzip2 sed gawk diffutils grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps monit inetutils-ping iputils-arping httping apt-get --no-install-recommends -q -y --force-yes install dnsutils zip unzip ethtool uuid file iproute acpid virt-what sudo diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index d6eb08dcbea..cb1debc27cf 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -11073,9 +11073,10 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it /*Regions*/ .region-switcher { + display: inline-block; z-index: 2002; position: relative; - background: url(../images/bg-gradients.png) 0px -1px; + background: url(../images/bg-gradients.png) repeat-x 0px -867px; border: 1px solid #5E5E5E; /*+border-radius:4px;*/ -moz-border-radius: 4px; @@ -11084,7 +11085,6 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it border-radius: 4px; border-top: 1px solid #717171; border-bottom: 1px solid #FFFFFF; - width: 32px; height: 28px; float: left; margin: 4px 13px 0 0; @@ -11213,10 +11213,26 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it } .region-switcher .icon { + display: inline-block; + float: left; display: block; - width: 100%; - height: 100%; + width: 26px; + height: 26px; background: url(../images/sprites.png) -15px -1313px; + position: absolute; +} + +.region-switcher .title { + display: inline-block; + float: right; + padding: 10px 9px 0 34px; + color: #FFFFFF; + font-size: 12px; + font-weight: bold; + max-width: 67px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .region-switcher:hover, diff --git a/ui/images/bg-what-is-cloudstack.png b/ui/images/bg-what-is-cloudstack.png index 6b61baa034d..db657dcf607 100644 Binary files a/ui/images/bg-what-is-cloudstack.png and b/ui/images/bg-what-is-cloudstack.png differ diff --git a/ui/scripts/regions.js b/ui/scripts/regions.js index f147df5787c..42a3e9de57c 100644 --- a/ui/scripts/regions.js +++ b/ui/scripts/regions.js @@ -27,7 +27,7 @@ args.response.success({ data: regions ? regions : [ - { id: -1, name: '(Default region)' } + { id: -1, name: '(Default)' } ], activeRegionID: cloudStack.context.users.regionid ? cloudStack.context.users.regionid : 1 diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 2f105aff2ae..d1bd9c5e10b 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -8950,7 +8950,8 @@ name: { label: 'label.name' }, ipaddress: { label: 'label.server' }, path: { label: 'label.path' }, - clustername: { label: 'label.cluster'} + clustername: { label: 'label.cluster'}, + scope:{label:'Scope'} }, dataProvider: function(args) { @@ -8991,6 +8992,51 @@ createForm: { title: 'label.add.primary.storage', fields: { + scope: { + label: 'label.scope', + select: function(args) { + var scope = [ + { id: 'zone-wide', description: _l('label.zone.wide') }, + { id: 'cluster', description: _l('label.cluster') }, + { id: 'host', description: _l('label.host') } + ]; + + args.response.success({ + data: scope + }); + + args.$select.change(function() { + var $form = $(this).closest('form'); + var scope = $(this).val(); + + if(scope == 'zone-wide'){ + $form.find('.form-item[rel=podId]').hide(); + $form.find('.form-item[rel=clusterId]').hide(); + $form.find('.form-item[rel=hostId]').hide(); + + + } + + else if(scope == 'cluster'){ + + $form.find('.form-item[rel=hostId]').hide(); + $form.find('.form-item[rel=podId]').css('display', 'inline-block'); + $form.find('.form-item[rel=clusterId]').css('display', 'inline-block'); + + + } + + else if(scope == 'host'){ + $form.find('.form-item[rel=podId]').css('display', 'inline-block'); + $form.find('.form-item[rel=clusterId]').css('display', 'inline-block'); + $form.find('.form-item[rel=hostId]').css('display', 'inline-block'); + + } + + }) + + } + }, zoneid: { label: 'Zone', docID: 'helpPrimaryStorageZone', @@ -9064,6 +9110,29 @@ } }, + hostId: { + label: 'label.host', + validation: { required: true }, + dependsOn: 'clusterId', + select: function(args) { + $.ajax({ + url: createURL('listHosts'), + data: { + clusterid: args.clusterId + }, + success: function(json) { + var hosts = json.listhostsresponse.host ? + json.listhostsresponse.host : [] + args.response.success({ + data: $.map(hosts, function(host) { + return { id: host.id, description: host.name } + }) + }); + } + }); + } + }, + name: { label: 'label.name', docID: 'helpPrimaryStorageName', @@ -9126,6 +9195,7 @@ var protocol = $(this).val(); if(protocol == null) return; + if(protocol == "nfs") { //$("#add_pool_server_container", $dialogAddPool).show(); @@ -9445,9 +9515,24 @@ action: function(args) { var array1 = []; + array1.push("&scope=" + todb(args.data.scope)); + array1.push("&zoneid=" + args.data.zoneid); - array1.push("&podId=" + args.data.podId); + + if(args.data.scope == 'cluster'){ + + array1.push("&podid=" + args.data.podId); array1.push("&clusterid=" + args.data.clusterId); + + } + + if(args.data.scope == 'host'){ + array1.push("&podid=" + args.data.podId); + array1.push("&clusterid=" + args.data.clusterId); + array1.push("&hostid=" + args.data.hostId); + + } + array1.push("&name=" + todb(args.data.name)); var server = args.data.server; diff --git a/ui/scripts/ui-custom/regions.js b/ui/scripts/ui-custom/regions.js index 02496726903..ac52776d49f 100644 --- a/ui/scripts/ui-custom/regions.js +++ b/ui/scripts/ui-custom/regions.js @@ -31,6 +31,7 @@ $(data).each(function() { var region = this; + var regionName = region.name; var $li = $('
  • ').append($('').html(_s(region.name))); $li.data('region-data', region); @@ -39,6 +40,10 @@ $li.addClass('active'); } + $regionSwitcherButton.find('.title') + .html(regionName) + .attr('title', regionName); + $regionList.append($li); }); } @@ -62,7 +67,8 @@ var $regionSwitcherButton = $('
    ').addClass('region-switcher') .attr('title', 'Select region') .append( - $('').addClass('icon').html(' ') + $('').addClass('icon').html(' '), + $('').addClass('title').html('') ); var closeRegionSelector = function(args) { @@ -72,7 +78,6 @@ }; var switchRegion = function(url) { - closeRegionSelector({ complete: function() { $('#container').prepend($('
    ').addClass('loading-overlay')); diff --git a/utils/src/com/cloud/utils/xmlobject/XmlObject.java b/utils/src/com/cloud/utils/xmlobject/XmlObject.java index a5b83a2d49b..80ac13df794 100644 --- a/utils/src/com/cloud/utils/xmlobject/XmlObject.java +++ b/utils/src/com/cloud/utils/xmlobject/XmlObject.java @@ -40,7 +40,10 @@ public class XmlObject { this.tag = tag; } - public XmlObject putElement(String key, Object e) { + public XmlObject putElement(String key, Object e) { + if (e == null) { + throw new IllegalArgumentException(String.format("element[%s] can not be null", key)); + } Object old = elements.get(key); if (old == null) { System.out.println(String.format("no %s, add new", key)); diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index e1399afa3c5..621c091481a 100755 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -1000,6 +1000,7 @@ public class HypervisorHostHelper { s_logger.error(msg); throw new Exception(msg); } + boolean importSuccess = true; final HttpNfcLeaseMO leaseMo = new HttpNfcLeaseMO(context, morLease); HttpNfcLeaseState state = leaseMo.waitState( new HttpNfcLeaseState[] { HttpNfcLeaseState.READY, HttpNfcLeaseState.ERROR }); @@ -1033,13 +1034,25 @@ public class HypervisorHostHelper { } } } + } catch (Exception e) { + s_logger.error("Failed to complete file upload task. " + e.getMessage()); + // Set flag to cleanup the stale template left due to failed import operation, if any + importSuccess = false; + throw e; } finally { progressReporter.close(); } + if (bytesAlreadyWritten == totalBytes) { leaseMo.updateLeaseProgress(100); } + } } finally { + if (!importSuccess) { + s_logger.error("Aborting the lease on " + vmName + " after import operation failed."); + leaseMo.abortLease(); + } else { leaseMo.completeLease(); } } + } }