Updated Branches: refs/heads/4.3 ac160079f -> 845753816
Fix listRouter by clusterId and upgradeRouterTemplate by clusterId Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/84575381 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/84575381 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/84575381 Branch: refs/heads/4.3 Commit: 84575381617cdff5bc5253fdac03947bbc117925 Parents: ac16007 Author: Kishan Kavala <kis...@cloud.com> Authored: Mon Nov 18 13:04:49 2013 +0530 Committer: Kishan Kavala <kis...@cloud.com> Committed: Mon Nov 18 13:15:42 2013 +0530 ---------------------------------------------------------------------- .../command/admin/router/ListRoutersCmd.java | 9 ++ .../com/cloud/vm/dao/DomainRouterDaoImpl.java | 17 +-- .../com/cloud/api/query/QueryManagerImpl.java | 13 ++- .../cloud/api/query/vo/DomainRouterJoinVO.java | 7 ++ setup/db/db/schema-421to430.sql | 103 +++++++++++++++++++ 5 files changed, 137 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84575381/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 2752a13..528d1a9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -65,6 +66,10 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { description="the Zone ID of the router") private Long zoneId; + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType=ClusterResponse.class, + description="the cluster ID of the router") + private Long clusterId; + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class, description="list by network id") private Long networkId; @@ -107,6 +112,10 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { return zoneId; } + public Long getClusterId() { + return clusterId; + } + public Long getNetworkId() { return networkId; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84575381/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index 5158e98..1e5dc94 100755 --- a/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -27,19 +27,15 @@ import org.springframework.stereotype.Component; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.host.dao.HostDaoImpl; import com.cloud.network.Network; import com.cloud.network.dao.RouterNetworkDao; -import com.cloud.network.dao.RouterNetworkDaoImpl; import com.cloud.network.dao.RouterNetworkVO; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VirtualRouter.Role; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.offerings.dao.NetworkOfferingDaoImpl; import com.cloud.user.UserStatisticsVO; import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.user.dao.UserStatisticsDaoImpl; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.JoinBuilder.JoinType; @@ -50,7 +46,6 @@ import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.TransactionLegacy; import com.cloud.utils.db.UpdateBuilder; import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; @Component @@ -63,6 +58,7 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im protected SearchBuilder<DomainRouterVO> HostUpSearch; protected SearchBuilder<DomainRouterVO> StateNetworkTypeSearch; protected SearchBuilder<DomainRouterVO> OutsidePodSearch; + protected SearchBuilder<DomainRouterVO> clusterSearch; @Inject HostDao _hostsDao; @Inject RouterNetworkDao _routerNetworkDao; @Inject UserStatisticsDao _userStatsDao; @@ -117,7 +113,7 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im StateNetworkTypeSearch = createSearchBuilder(); StateNetworkTypeSearch.select(null, Func.DISTINCT, StateNetworkTypeSearch.entity().getId()); StateNetworkTypeSearch.and("state", StateNetworkTypeSearch.entity().getState(), Op.EQ); - SearchBuilder<RouterNetworkVO> joinRouterNetwork4 = _routerNetworkDao.createSearchBuilder(); + SearchBuilder<RouterNetworkVO> joinRouterNetwork4 =_routerNetworkDao.createSearchBuilder(); joinRouterNetwork4.and("networkId", joinRouterNetwork4.entity().getNetworkId(), Op.EQ); joinRouterNetwork4.and("type", joinRouterNetwork4.entity().getGuestType(), Op.EQ); StateNetworkTypeSearch.join("networkRouter", joinRouterNetwork4, joinRouterNetwork4.entity().getRouterId(), StateNetworkTypeSearch.entity().getId(), JoinType.INNER); @@ -139,6 +135,11 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im OutsidePodSearch.and("role", OutsidePodSearch.entity().getRole(), Op.EQ); OutsidePodSearch.done(); + clusterSearch = createSearchBuilder(); + SearchBuilder<HostVO> clusterHost = _hostsDao.createSearchBuilder(); + clusterHost.and("clusterId", clusterHost.entity().getClusterId(), Op.EQ); + clusterSearch.join("host", clusterHost, clusterSearch.entity().getHostId(), clusterHost.entity().getId(),JoinType.INNER); + clusterSearch.done(); } @Override @@ -205,8 +206,8 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im @Override public List<DomainRouterVO> listByClusterId(Long clusterId) { - SearchCriteria<DomainRouterVO> sc = AllFieldsSearch.create(); - //ToDo: Add cluster criteria + SearchCriteria<DomainRouterVO> sc = clusterSearch.create(); + sc.setJoinParameters("host", "clusterId", clusterId); return listBy(sc); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84575381/server/src/com/cloud/api/query/QueryManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index f251000..e74159c 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -1090,7 +1090,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { @Override public ListResponse<DomainRouterResponse> searchForRouters(ListRoutersCmd cmd) { Pair<List<DomainRouterJoinVO>, Integer> result = searchForRoutersInternal(cmd, cmd.getId(), cmd.getRouterName(), - cmd.getState(), cmd.getZoneId(), cmd.getPodId(), cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), + cmd.getState(), cmd.getZoneId(), cmd.getPodId(), cmd.getClusterId(), cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), cmd.getVpcId(), cmd.getForVpc(), cmd.getRole(), cmd.getVersion()); ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>(); @@ -1103,7 +1103,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { @Override public ListResponse<DomainRouterResponse> searchForInternalLbVms(ListInternalLBVMsCmd cmd) { Pair<List<DomainRouterJoinVO>, Integer> result = searchForRoutersInternal(cmd, cmd.getId(), cmd.getRouterName(), - cmd.getState(), cmd.getZoneId(), cmd.getPodId(), cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), + cmd.getState(), cmd.getZoneId(), cmd.getPodId(), null, cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), cmd.getVpcId(), cmd.getForVpc(), cmd.getRole(), null); ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>(); @@ -1114,7 +1114,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { } private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(BaseListProjectAndAccountResourcesCmd cmd, Long id, - String name, String state, Long zoneId, Long podId, Long hostId, String keyword, Long networkId, Long vpcId, Boolean forVpc, + String name, String state, Long zoneId, Long podId, Long clusterId, Long hostId, String keyword, Long networkId, Long vpcId, Boolean forVpc, String role, String version) { Account caller = CallContext.current().getCallingAccount(); @@ -1146,10 +1146,11 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); + sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ); sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ); sb.and("role", sb.entity().getRole(), SearchCriteria.Op.EQ); - sb.and("version", sb.entity().getTemplateVersion(), SearchCriteria.Op.EQ); + sb.and("version", sb.entity().getTemplateVersion(), SearchCriteria.Op.LIKE); if (forVpc != null) { if (forVpc) { @@ -1197,6 +1198,10 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sc.setParameters("podId", podId); } + if (clusterId != null) { + sc.setParameters("clusterId", clusterId); + } + if (hostId != null) { sc.setParameters("hostId", hostId); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84575381/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java index 33865e2..bba8943 100644 --- a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java +++ b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java @@ -101,6 +101,9 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti @Column(name="data_center_name") private String dataCenterName = null; + @Column(name="cluster_id") + private long clusterId; + @Column(name="dns1") private String dns1 = null; @@ -334,6 +337,10 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti return hostName; } + public Long getClusterId() { + return clusterId; + } + public long getTemplateId() { return templateId; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/84575381/setup/db/db/schema-421to430.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql index 6507148..2692640 100644 --- a/setup/db/db/schema-421to430.sql +++ b/setup/db/db/schema-421to430.sql @@ -639,3 +639,106 @@ CREATE TABLE `cloud`.`remote_access_vpn_details` ( PRIMARY KEY (`id`), CONSTRAINT `fk_remote_access_vpn_details__remote_access_vpn_id` FOREIGN KEY `fk_remote_access_vpn_details__remote_access_vpn_id`(`remote_access_vpn_id`) REFERENCES `remote_access_vpn`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP VIEW IF EXISTS `cloud`.`domain_router_view`; +CREATE VIEW `cloud`.`domain_router_view` AS + select + vm_instance.id id, + vm_instance.name name, + account.id account_id, + account.uuid account_uuid, + account.account_name account_name, + account.type account_type, + domain.id domain_id, + domain.uuid domain_uuid, + domain.name domain_name, + domain.path domain_path, + projects.id project_id, + projects.uuid project_uuid, + projects.name project_name, + vm_instance.uuid uuid, + vm_instance.created created, + vm_instance.state state, + vm_instance.removed removed, + vm_instance.pod_id pod_id, + vm_instance.instance_name instance_name, + host_pod_ref.uuid pod_uuid, + data_center.id data_center_id, + data_center.uuid data_center_uuid, + data_center.name data_center_name, + data_center.networktype data_center_type, + data_center.dns1 dns1, + data_center.dns2 dns2, + data_center.ip6_dns1 ip6_dns1, + data_center.ip6_dns2 ip6_dns2, + host.id host_id, + host.uuid host_uuid, + host.name host_name, + host.cluster_id cluster_id, + vm_template.id template_id, + vm_template.uuid template_uuid, + service_offering.id service_offering_id, + disk_offering.uuid service_offering_uuid, + disk_offering.name service_offering_name, + nics.id nic_id, + nics.uuid nic_uuid, + nics.network_id network_id, + nics.ip4_address ip_address, + nics.ip6_address ip6_address, + nics.ip6_gateway ip6_gateway, + nics.ip6_cidr ip6_cidr, + nics.default_nic is_default_nic, + nics.gateway gateway, + nics.netmask netmask, + nics.mac_address mac_address, + nics.broadcast_uri broadcast_uri, + nics.isolation_uri isolation_uri, + vpc.id vpc_id, + vpc.uuid vpc_uuid, + networks.uuid network_uuid, + networks.name network_name, + networks.network_domain network_domain, + networks.traffic_type traffic_type, + networks.guest_type guest_type, + async_job.id job_id, + async_job.uuid job_uuid, + async_job.job_status job_status, + async_job.account_id job_account_id, + domain_router.template_version template_version, + domain_router.scripts_version scripts_version, + domain_router.is_redundant_router is_redundant_router, + domain_router.redundant_state redundant_state, + domain_router.stop_pending stop_pending, + domain_router.role role + from + `cloud`.`domain_router` + inner join + `cloud`.`vm_instance` ON vm_instance.id = domain_router.id + inner join + `cloud`.`account` ON vm_instance.account_id = account.id + inner join + `cloud`.`domain` ON vm_instance.domain_id = domain.id + left join + `cloud`.`host_pod_ref` ON vm_instance.pod_id = host_pod_ref.id + left join + `cloud`.`projects` ON projects.project_account_id = account.id + left join + `cloud`.`data_center` ON vm_instance.data_center_id = data_center.id + left join + `cloud`.`host` ON vm_instance.host_id = host.id + left join + `cloud`.`vm_template` ON vm_instance.vm_template_id = vm_template.id + left join + `cloud`.`service_offering` ON vm_instance.service_offering_id = service_offering.id + left join + `cloud`.`disk_offering` ON vm_instance.service_offering_id = disk_offering.id + left join + `cloud`.`nics` ON vm_instance.id = nics.instance_id and nics.removed is null + left join + `cloud`.`networks` ON nics.network_id = networks.id + left join + `cloud`.`vpc` ON domain_router.vpc_id = vpc.id and vpc.removed is null + left join + `cloud`.`async_job` ON async_job.instance_id = vm_instance.id + and async_job.instance_type = 'DomainRouter' + and async_job.job_status = 0;