diff --git a/core/src/com/cloud/network/security/dao/NetworkGroupDao.java b/core/src/com/cloud/network/security/dao/NetworkGroupDao.java index 189538d32ed..ef9e3c863e2 100644 --- a/core/src/com/cloud/network/security/dao/NetworkGroupDao.java +++ b/core/src/com/cloud/network/security/dao/NetworkGroupDao.java @@ -28,5 +28,6 @@ public interface NetworkGroupDao extends GenericDao { boolean isNameInUse(Long accountId, Long domainId, String name); List listAvailableGroups(Long accountId, Long domainId); NetworkGroupVO findByAccountAndName(Long accountId, String name); - List findByAccountAndNames(Long accountId, String... names); + List findByAccountAndNames(Long accountId, String... names); + int removeByAccountId(long accountId); } diff --git a/core/src/com/cloud/network/security/dao/NetworkGroupDaoImpl.java b/core/src/com/cloud/network/security/dao/NetworkGroupDaoImpl.java index 13984f692f7..82ffaec5833 100644 --- a/core/src/com/cloud/network/security/dao/NetworkGroupDaoImpl.java +++ b/core/src/com/cloud/network/security/dao/NetworkGroupDaoImpl.java @@ -125,5 +125,12 @@ public class NetworkGroupDaoImpl extends GenericDaoBase im sc.setParameters("groupNames", (Object [])names); return listActiveBy(sc); + } + + @Override + public int removeByAccountId(long accountId) { + SearchCriteria sc = AccountIdSearch.create(); + sc.setParameters("accountId", accountId); + return delete(sc); } } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4c3ddc0b355..0354f84d581 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1003,6 +1003,9 @@ public class ManagementServerImpl implements ManagementServer { } } + int numRemoved = _networkSecurityGroupDao.removeByAccountId(accountId); + s_logger.info("deleteAccount: Deleted " + numRemoved + " network groups for account " + accountId); + // Delete the account's VLANs List accountVlans = _vlanDao.listVlansForAccountByType(null, accountId, VlanType.DirectAttached); boolean allVlansDeleted = true; diff --git a/setup/db/create-index-fk.sql b/setup/db/create-index-fk.sql index e5a2e7b0deb..fb73534b192 100644 --- a/setup/db/create-index-fk.sql +++ b/setup/db/create-index-fk.sql @@ -235,7 +235,7 @@ ALTER TABLE `cloud`.`network_group` ADD CONSTRAINT `fk_network_group__domain_id` ALTER TABLE `cloud`.`network_group` ADD INDEX `i_network_group_name`(`name`); ALTER TABLE `cloud`.`network_ingress_rule` ADD CONSTRAINT `fk_network_ingress_rule___network_group_id` FOREIGN KEY `fk_network_ingress_rule__network_group_id` (`network_group_id`) REFERENCES `network_group` (`id`) ON DELETE CASCADE; -ALTER TABLE `cloud`.`network_ingress_rule` ADD CONSTRAINT `fk_network_ingress_rule___allowed_network_id` FOREIGN KEY `fk_network_ingress_rule__allowed_network_id` (`allowed_network_id`) REFERENCES `network_group` (`id`); +ALTER TABLE `cloud`.`network_ingress_rule` ADD CONSTRAINT `fk_network_ingress_rule___allowed_network_id` FOREIGN KEY `fk_network_ingress_rule__allowed_network_id` (`allowed_network_id`) REFERENCES `network_group` (`id`) ON DELETE CASCADE; ALTER TABLE `cloud`.`network_ingress_rule` ADD INDEX `i_network_ingress_rule_network_id`(`network_group_id`); ALTER TABLE `cloud`.`network_ingress_rule` ADD INDEX `i_network_ingress_rule_allowed_network`(`allowed_network_id`);