diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index d6e0153672b..b34bf0d15f7 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -36,6 +36,9 @@ import com.cloud.network.router.VirtualRouter; @PrimaryKeyJoinColumn(name="id") @DiscriminatorValue(value="DomainRouter") public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { + @Column(name="element_id") + private long elementId; + @Column(name="public_ip_address") private String publicIpAddress; @@ -79,6 +82,7 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { public DomainRouterVO(long id, long serviceOfferingId, + long elementId, String name, long templateId, HypervisorType hypervisorType, @@ -90,9 +94,9 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { int priority, boolean isPriorityBumpUp, RedundantState redundantState, - boolean haEnabled, - boolean stopPending) { + boolean haEnabled, boolean stopPending) { super(id, serviceOfferingId, name, name, Type.DomainRouter, templateId, hypervisorType, guestOSId, domainId, accountId, haEnabled); + this.elementId = elementId; this.networkId = networkId; this.isRedundantRouter = isRedundantRouter; this.priority = priority; @@ -103,6 +107,7 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { public DomainRouterVO(long id, long serviceOfferingId, + long elementId, String name, long templateId, HypervisorType hypervisorType, @@ -115,9 +120,9 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { boolean isPriorityBumpUp, RedundantState redundantState, boolean haEnabled, - boolean stopPending, - VirtualMachine.Type vmType) { + boolean stopPending, VirtualMachine.Type vmType) { super(id, serviceOfferingId, name, name, vmType, templateId, hypervisorType, guestOSId, domainId, accountId, haEnabled); + this.elementId = elementId; this.networkId = networkId; this.isRedundantRouter = isRedundantRouter; this.priority = priority; @@ -126,6 +131,10 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { this.stopPending = stopPending; } + public long getElementId() { + return elementId; + } + public void setPublicIpAddress(String publicIpAddress) { this.publicIpAddress = publicIpAddress; } diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java new file mode 100644 index 00000000000..648ddae1a9f --- /dev/null +++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java @@ -0,0 +1,29 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.dao; + +import java.util.List; + +import com.cloud.network.element.VirtualRouterElementsVO; +import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType; +import com.cloud.utils.db.GenericDao; + +public interface VirtualRouterElementsDao extends GenericDao { + public List findByNspIdAndType(long nspId, VirtualRouterElementsType type); + public VirtualRouterElementsVO findByUUID(String uuid); +} diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java new file mode 100644 index 00000000000..93972ef4830 --- /dev/null +++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.dao; + +import java.util.List; + +import javax.ejb.Local; + +import com.cloud.network.element.VirtualRouterElementsVO; +import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + +@Local(value=VirtualRouterElementsDao.class) @DB(txn=false) +public class VirtualRouterElementsDaoImpl extends GenericDaoBase implements VirtualRouterElementsDao { + final SearchBuilder AllFieldsSearch; + + public VirtualRouterElementsDaoImpl() { + super(); + AllFieldsSearch = createSearchBuilder(); + AllFieldsSearch.and("nsp_id", AllFieldsSearch.entity().getNspId(), SearchCriteria.Op.EQ); + AllFieldsSearch.and("uuid", AllFieldsSearch.entity().getUUID(), SearchCriteria.Op.EQ); + AllFieldsSearch.and("type", AllFieldsSearch.entity().getType(), SearchCriteria.Op.EQ); + AllFieldsSearch.done(); + } + + @Override + public List findByNspIdAndType(long nspId, VirtualRouterElementsType type) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("nsp_id", nspId); + sc.setParameters("type", type); + return listBy(sc); + } + + @Override + public VirtualRouterElementsVO findByUUID(String uuid) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("uuid", uuid); + return findOneBy(sc); + } +} diff --git a/server/src/com/cloud/network/element/VirtualRouterElements.java b/server/src/com/cloud/network/element/VirtualRouterElements.java new file mode 100644 index 00000000000..3cb21796808 --- /dev/null +++ b/server/src/com/cloud/network/element/VirtualRouterElements.java @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.cloud.network.element; + +public interface VirtualRouterElements { + public enum VirtualRouterElementsType { + DhcpElement, + VirtualRouterElement, + RedundantVirtualRouterElement, + } + public VirtualRouterElementsType getType(); +} diff --git a/server/src/com/cloud/network/element/VirtualRouterElementsVO.java b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java new file mode 100644 index 00000000000..c2720748de5 --- /dev/null +++ b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java @@ -0,0 +1,230 @@ +/** + * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.element; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name=("virtual_router_elements")) +public class VirtualRouterElementsVO implements VirtualRouterElements { + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + @Column(name="id") + long id; + + @Column(name="type") + @Enumerated(EnumType.STRING) + private VirtualRouterElementsType type; + + @Column(name="ready") + private boolean isReady; + + @Column(name="nsp_id") + private long nspId; + + @Column(name="uuid") + private String uuid; + + @Column(name="dhcp_provided") + private boolean isDhcpProvided; + + @Column(name="dns_provided") + private boolean isDnsProvided; + + @Column(name="gateway_provided") + private boolean isGatewayProvided; + + @Column(name="firewall_provided") + private boolean isFirewallProvided; + + @Column(name="source_nat_provided") + private boolean isSourceNatProvided; + + @Column(name="load_balance_provided") + private boolean isLoadBalanceProvided; + + @Column(name="vpn_provided") + private boolean isVpnProvided; + + @Column(name="dhcp_range") + private String dhcpRange; + + @Column(name="default_domain_name") + private String defaultDomainName; + + @Column(name="dns1") + private String dns1; + + @Column(name="dns2") + private String dns2; + + @Column(name="internal_dns1") + private String internalDns1; + + @Column(name="internal_dns2") + private String internalDns2; + + @Column(name="gateway_ip") + private String gatewayIp; + + @Column(name=GenericDao.REMOVED_COLUMN) + Date removed; + + public VirtualRouterElementsVO(long nspId, String uuid, boolean isReady, VirtualRouterElementsType type, boolean isDhcpProvided, boolean isDnsProvided, + boolean isGatewayProvided, boolean isFirewallProvided, boolean isSourceNatProvided, boolean isLoadBalanceProvided, boolean isVpnProvided) { + this.nspId = nspId; + this.uuid = uuid; + this.isReady = isReady; + this.type = type; + this.isDhcpProvided = isDhcpProvided; + this.isDnsProvided = isDnsProvided; + this.isGatewayProvided = isGatewayProvided; + this.isFirewallProvided = isFirewallProvided; + this.isSourceNatProvided = isSourceNatProvided; + this.isLoadBalanceProvided = isLoadBalanceProvided; + this.isVpnProvided = isVpnProvided; + } + + public long getNspId() { + return nspId; + } + + public String getUUID() { + return uuid; + } + + public long getId() { + return id; + } + + public String getDhcpRange() { + return dhcpRange; + } + + public void setDhcpRange(String dhcpRange) { + this.dhcpRange = dhcpRange; + } + + public String getDefaultDomainName() { + return defaultDomainName; + } + + public void setDefaultDomainName(String defaultDomainName) { + this.defaultDomainName = defaultDomainName; + } + + public String getDns1() { + return dns1; + } + + public void setDns1(String dns1) { + this.dns1 = dns1; + } + + public String getDns2() { + return dns2; + } + + public void setDns2(String dns2) { + this.dns2 = dns2; + } + + public String getInternalDns1() { + return internalDns1; + } + + public void setInternalDns1(String internalDns1) { + this.internalDns1 = internalDns1; + } + + public String getInternalDns2() { + return internalDns2; + } + + public void setInternalDns2(String internalDns2) { + this.internalDns2 = internalDns2; + } + + public boolean isDhcpProvided() { + return isDhcpProvided; + } + + public boolean isDnsProvided() { + return isDnsProvided; + } + + public boolean isGatewayProvided() { + return isGatewayProvided; + } + + public boolean isFirewallProvided() { + return isFirewallProvided; + } + + public boolean isSourceNatProvided() { + return isSourceNatProvided; + } + + public boolean isLoadBalanceProvided() { + return isLoadBalanceProvided; + } + + public boolean isVpnProvided() { + return isVpnProvided; + } + + @Override + public VirtualRouterElementsType getType() { + return this.type; + } + + public String getGatewayIp() { + return gatewayIp; + } + + public void setGatewayIp(String gatewayIp) { + this.gatewayIp = gatewayIp; + } + + public Date getRemoved() { + return removed; + } + + public void setRemoved(Date removed) { + this.removed = removed; + } + + public void setReady(boolean isReady) { + this.isReady = isReady; + } + + public boolean isReady() { + return isReady; + } +} diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 790bf05bd24..0fefd4de425 100644 --- a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -497,8 +497,8 @@ public class ElasticLoadBalancerManagerImpl implements VMTemplateVO template = _templateDao.findSystemVMTemplate(dcId); - elbVm = new DomainRouterVO(id, _elasticLbVmOffering.getId(), VirtualMachineName.getSystemVmName(id, _instance, _elbVmNamePrefix), template.getId(), template.getHypervisorType(), template.getGuestOSId(), - owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm); + elbVm = new DomainRouterVO(id, _elasticLbVmOffering.getId(), 0, VirtualMachineName.getSystemVmName(id, _instance, _elbVmNamePrefix), template.getId(), template.getHypervisorType(), + template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm); elbVm.setRole(Role.LB); elbVm = _itMgr.allocate(elbVm, template, _elasticLbVmOffering, networks, plan, null, owner); //TODO: create usage stats diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 8ed21ce4e43..f278ed10ac1 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1090,8 +1090,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (routers.size() >= 5) { s_logger.error("Too much redundant routers!"); } - router = new DomainRouterVO(id, _offering.getId(), VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), template.getGuestOSId(), - owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); + router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), + template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner); // Creating stats entry for router UserStatisticsVO stats = _userStatsDao.findBy(owner.getId(), dcId, router.getNetworkId(), null, router.getId(), router.getType().toString()); @@ -1275,8 +1275,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian /* Before starting router, already know the hypervisor type */ VMTemplateVO template = _templateDao.findRoutingTemplate(dest.getCluster().getHypervisorType()); - router = new DomainRouterVO(id, _offering.getId(), VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), template.getGuestOSId(), - owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); + router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), + template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); router.setRole(Role.DHCP_USERDATA); router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner); routers.add(router); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index f76d564741c..ad6f682b1f1 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -118,6 +118,7 @@ DROP TABLE IF EXISTS `cloud`.`network_tags`; DROP TABLE IF EXISTS `cloud`.`op_host_transfer`; DROP TABLE IF EXISTS `cloud`.`projects`; DROP TABLE IF EXISTS `cloud`.`physical_network`; +DROP TABLE IF EXISTS `cloud`.`virtual_router_elements`; CREATE TABLE `cloud`.`version` ( `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id', @@ -929,6 +930,7 @@ CREATE TABLE `cloud`.`user_vm_details` ( CREATE TABLE `cloud`.`domain_router` ( `id` bigint unsigned UNIQUE NOT NULL COMMENT 'Primary Key', + `element_id` bigint unsigned NOT NULL COMMENT 'correlated virtual router element ID', `public_mac_address` varchar(17) COMMENT 'mac address of the public facing network card', `public_ip_address` char(40) COMMENT 'public ip address used for source net', `public_netmask` varchar(15) COMMENT 'netmask used for the domR', @@ -945,6 +947,7 @@ CREATE TABLE `cloud`.`domain_router` ( `scripts_version` varchar(100) COMMENT 'scripts version', PRIMARY KEY (`id`), CONSTRAINT `fk_domain_router__id` FOREIGN KEY `fk_domain_router__id` (`id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE + #CONSTRAINT `fk_domain_router__element_id` FOREIGN KEY `fk_domain_router__element_id` (`element_id`) REFERENCES `virtual_router_elements`(`id`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8 COMMENT = 'information about the domR instance'; CREATE TABLE `cloud`.`upload` ( @@ -1724,6 +1727,32 @@ CREATE TABLE `cloud`.`elastic_lb_vm_map` ( CONSTRAINT `fk_elastic_lb_vm_map__lb_id` FOREIGN KEY `fk_elastic_lb_vm_map__lb_id` (`lb_id`) REFERENCES `load_balancing_rules` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `cloud`.`virtual_router_elements` ( + `id` bigint unsigned NOT NULL auto_increment, + `nsp_id` bigint unsigned NOT NULL, + `uuid` varchar(255) UNIQUE, + `ready` int(1) NOT NULL, + `type` varchar(255) NOT NULL, + `dhcp_provided` int(1) NOT NULL, + `dns_provided` int(1) NOT NULL, + `gateway_provided` int(1) NOT NULL, + `firewall_provided` int(1) NOT NULL, + `source_nat_provided` int(1) NOT NULL, + `load_balance_provided` int(1) NOT NULL, + `vpn_provided` int(1) NOT NULL, + `service_offering_id` bigint unsigned NOT NULL, + `dhcp_range` varchar(255), + `default_domain_name` varchar(255), + `dns1` varchar(255), + `dns2` varchar(255), + `internal_dns1` varchar(255), + `internal_dns2` varchar(255), + `gateway_ip` varchar(255), + `removed` datetime COMMENT 'date removed if not null', + PRIMARY KEY (`id`), + CONSTRAINT `fk_virtual_router_elements__service_offering_id` FOREIGN KEY `fk_virtual_router_elements__service_offering_id` (`service_offering_id`) REFERENCES `service_offering`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + CREATE TABLE `ntwk_offering_service_map` ( `id` bigint unsigned NOT NULL auto_increment,