diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index f0ebe565069..79bc3d5bccf 100644 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -3584,7 +3584,17 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe final Long domainId = cmd.getDomainId(); final Long projectId = cmd.getProjectId(); - final Account owner = _accountMgr.finalizeOwner(caller, accountName, domainId, projectId); + Account owner = null; + try { + owner = _accountMgr.finalizeOwner(caller, accountName, domainId, projectId); + } catch (InvalidParameterValueException ex) { + if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && accountName != null && domainId != null) { + owner = _accountDao.findAccountIncludingRemoved(accountName, domainId); + } + if (owner == null) { + throw ex; + } + } final SSHKeyPairVO s = _sshKeyPairDao.findByName(owner.getAccountId(), owner.getDomainId(), cmd.getName()); if (s == null) { diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 4a303cc6f74..a8a38ba74c5 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -991,7 +991,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C _capacityDao.persist(capacity); } else { CapacityVO capacity = capacities.get(0); - if (capacity.getTotalCapacity() != totalOverProvCapacity || allocated != 0L || capacity.getCapacityState() != capacityState) { + if (capacity.getTotalCapacity() != totalOverProvCapacity || allocated != capacity.getUsedCapacity() || capacity.getCapacityState() != capacityState) { capacity.setTotalCapacity(totalOverProvCapacity); capacity.setUsedCapacity(allocated); capacity.setCapacityState(capacityState); diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 45768cf3c6e..e3209474563 100644 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -87,6 +87,7 @@ import com.cloud.template.TemplateManager; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account.State; import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.ConstantTimeComparator; @@ -263,6 +264,8 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M private DedicatedResourceDao _dedicatedDao; @Inject private GlobalLoadBalancerRuleDao _gslbRuleDao; + @Inject + private SSHKeyPairDao _sshKeyPairDao; List _querySelectors; @@ -924,6 +927,12 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M // Delete resource count and resource limits entries set for this account (if there are any). _resourceCountDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account); _resourceLimitDao.removeEntriesByOwner(accountId, ResourceOwnerType.Account); + + // Delete ssh keypairs + List sshkeypairs = _sshKeyPairDao.listKeyPairs(accountId, account.getDomainId()); + for (SSHKeyPairVO keypair: sshkeypairs) { + _sshKeyPairDao.remove(keypair.getId()); + } return true; } catch (Exception ex) { s_logger.warn("Failed to cleanup account " + account + " due to ", ex); diff --git a/server/test/com/cloud/user/AccountManagerImplTest.java b/server/test/com/cloud/user/AccountManagerImplTest.java index a4da8191e33..9190cf83e63 100644 --- a/server/test/com/cloud/user/AccountManagerImplTest.java +++ b/server/test/com/cloud/user/AccountManagerImplTest.java @@ -20,6 +20,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import com.cloud.acl.DomainChecker; import com.cloud.exception.PermissionDeniedException; @@ -105,6 +106,13 @@ public class AccountManagerImplTest extends AccountManagetImplTestBase { .thenReturn(true); Mockito.when(_vmSnapshotDao.listByAccountId(Mockito.anyLong())).thenReturn(new ArrayList()); + List sshkeyList = new ArrayList(); + SSHKeyPairVO sshkey = new SSHKeyPairVO(); + sshkey.setId(1l); + sshkeyList.add(sshkey); + Mockito.when(_sshKeyPairDao.listKeyPairs(Mockito.anyLong(), Mockito.anyLong())).thenReturn(sshkeyList); + Mockito.when(_sshKeyPairDao.remove(Mockito.anyLong())).thenReturn(true); + Assert.assertTrue(accountManager.deleteUserAccount(42)); // assert that this was a clean delete Mockito.verify(_accountDao, Mockito.never()).markForCleanup( diff --git a/server/test/com/cloud/user/AccountManagetImplTestBase.java b/server/test/com/cloud/user/AccountManagetImplTestBase.java index 5f1e8417c2b..53b781a5868 100644 --- a/server/test/com/cloud/user/AccountManagetImplTestBase.java +++ b/server/test/com/cloud/user/AccountManagetImplTestBase.java @@ -69,6 +69,7 @@ import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.template.TemplateManager; import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; import com.cloud.vm.VirtualMachineManager; @@ -189,7 +190,8 @@ public class AccountManagetImplTestBase { ServiceOfferingDao _offeringDao; @Mock OrchestrationService _orchSrvc; - + @Mock + SSHKeyPairDao _sshKeyPairDao; AccountManagerImpl accountManager; diff --git a/systemvm/patches/debian/config/opt/cloud/bin/checkbatchs2svpn.sh b/systemvm/patches/debian/config/opt/cloud/bin/checkbatchs2svpn.sh index 80e3213753b..ff977f5a2cb 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/checkbatchs2svpn.sh +++ b/systemvm/patches/debian/config/opt/cloud/bin/checkbatchs2svpn.sh @@ -20,6 +20,6 @@ for i in $* do info=`/opt/cloud/bin/checks2svpn.sh $i` ret=$? - echo -n "$i:$ret:$info&" + batchInfo+="$i:$ret:$info&" done - +echo -n $batchInfo