Skip to content

Commit fb4c448

Browse files
committed
Don't create default pod/zone
Create untagged network as a part of createZone command
1 parent eaf4fc3 commit fb4c448

12 files changed

Lines changed: 135 additions & 67 deletions

File tree

api/src/com/cloud/dc/DataCenter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*/
1111
public interface DataCenter extends Grouping {
12-
public enum DataCenterNetworkType {
12+
public enum NetworkType {
1313
Basic,
1414
Advanced
1515
}
@@ -23,7 +23,7 @@ public enum DataCenterNetworkType {
2323
String getDomain();
2424
String getVnet();
2525

26-
DataCenterNetworkType getNetworkType();
26+
NetworkType getNetworkType();
2727
String getInternalDns1();
2828
String getInternalDns2();
2929
String getDnsProvider();

api/src/com/cloud/offering/NetworkOffering.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public enum GuestIpType {
3333

3434
public final String DefaultVirtualizedNetworkOffering = "DefaultVirtualizedNetworkOffering";
3535
public final String DefaultDirectNetworkOffering = "DefaultDirectNetworkOffering";
36+
public final String DefaultDirectPodBasedNetworkOffering = "DefaultDirectPodBasedNetworkOffering";
3637
public final String DefaultDirectChooseVlanNetworkOffering = "DefaultDirectChooseVlanNetworkOffering";
3738

3839
long getId();

server/src/com/cloud/agent/AgentManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.cloud.exception.InvalidParameterValueException;
3232
import com.cloud.exception.OperationTimedoutException;
3333
import com.cloud.host.Host;
34-
import com.cloud.host.Host.Type;
3534
import com.cloud.host.HostStats;
3635
import com.cloud.host.HostVO;
3736
import com.cloud.host.Status;

server/src/com/cloud/configuration/ConfigurationManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import com.cloud.api.commands.CreateVlanIpRangeCmd;
2323
import com.cloud.dc.DataCenter;
24-
import com.cloud.dc.DataCenter.DataCenterNetworkType;
24+
import com.cloud.dc.DataCenter.NetworkType;
2525
import com.cloud.dc.DataCenterVO;
2626
import com.cloud.dc.HostPodVO;
2727
import com.cloud.dc.Vlan;
@@ -111,7 +111,7 @@ public interface ConfigurationManager extends Manager {
111111
* @throws
112112
* @throws
113113
*/
114-
DataCenterVO createZone(long userId, String zoneName, String dns1, String dns2, String internalDns1, String internalDns2, String vnetRange, String guestCidr, String domain, Long domainId, DataCenterNetworkType zoneType);
114+
DataCenterVO createZone(long userId, String zoneName, String dns1, String dns2, String internalDns1, String internalDns2, String vnetRange, String guestCidr, String domain, Long domainId, NetworkType zoneType);
115115

116116
/**
117117
* Associates an ip address list to an account. The list of ip addresses are all addresses associated with the given vlan id.

server/src/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
import com.cloud.configuration.dao.ConfigurationDao;
5656
import com.cloud.dc.AccountVlanMapVO;
5757
import com.cloud.dc.DataCenter;
58-
import com.cloud.dc.DataCenter.DataCenterNetworkType;
58+
import com.cloud.dc.DataCenter.NetworkType;
5959
import com.cloud.dc.DataCenterIpAddressVO;
6060
import com.cloud.dc.DataCenterVO;
6161
import com.cloud.dc.HostPodVO;
@@ -71,6 +71,7 @@
7171
import com.cloud.dc.dao.HostPodDao;
7272
import com.cloud.dc.dao.PodVlanMapDao;
7373
import com.cloud.dc.dao.VlanDao;
74+
import com.cloud.deploy.DataCenterDeployment;
7475
import com.cloud.domain.DomainVO;
7576
import com.cloud.domain.dao.DomainDao;
7677
import com.cloud.event.EventTypes;
@@ -84,6 +85,8 @@
8485
import com.cloud.exception.PermissionDeniedException;
8586
import com.cloud.hypervisor.Hypervisor.HypervisorType;
8687
import com.cloud.network.NetworkManager;
88+
import com.cloud.network.NetworkVO;
89+
import com.cloud.network.Networks.BroadcastDomainType;
8790
import com.cloud.network.Networks.TrafficType;
8891
import com.cloud.network.dao.IPAddressDao;
8992
import com.cloud.offering.DiskOffering;
@@ -897,7 +900,7 @@ public DataCenter editZone(UpdateZoneCmd cmd) {
897900
}
898901

899902
//if zone is of Basic type, don't allow to add vnet range
900-
if (vnetRange != null && zone.getNetworkType() == DataCenterNetworkType.Basic) {
903+
if (vnetRange != null && zone.getNetworkType() == NetworkType.Basic) {
901904
throw new InvalidParameterValueException("Can't add vnet range for the zone that supports Basic network");
902905
}
903906

@@ -1021,7 +1024,7 @@ public DataCenter editZone(UpdateZoneCmd cmd) {
10211024
}
10221025

10231026
@Override @DB
1024-
public DataCenterVO createZone(long userId, String zoneName, String dns1, String dns2, String internalDns1, String internalDns2, String vnetRange, String guestCidr, String domain, Long domainId, DataCenterNetworkType zoneType) {
1027+
public DataCenterVO createZone(long userId, String zoneName, String dns1, String dns2, String internalDns1, String internalDns2, String vnetRange, String guestCidr, String domain, Long domainId, NetworkType zoneType) {
10251028
int vnetStart = 0;
10261029
int vnetEnd = 0;
10271030
if (vnetRange != null) {
@@ -1046,21 +1049,55 @@ public DataCenterVO createZone(long userId, String zoneName, String dns1, String
10461049

10471050
checkZoneParameters(zoneName, dns1, dns2, internalDns1, internalDns2, true, domainId);
10481051

1049-
// Create the new zone in the database
1050-
DataCenterVO zone = new DataCenterVO(zoneName, null, dns1, dns2, internalDns1, internalDns2, vnetRange, guestCidr, domain, domainId, zoneType);
1051-
zone = _zoneDao.persist(zone);
1052+
Transaction txn = Transaction.currentTxn();
1053+
try {
1054+
// Create the new zone in the database
1055+
DataCenterVO zone = new DataCenterVO(zoneName, null, dns1, dns2, internalDns1, internalDns2, vnetRange, guestCidr, domain, domainId, zoneType);
1056+
zone = _zoneDao.persist(zone);
10521057

1053-
// Add vnet entries for the new zone if zone type is Advanced
1054-
if (vnetRange != null) {
1055-
_zoneDao.addVnet(zone.getId(), vnetStart, vnetEnd);
1056-
}
1057-
1058-
if (vnetRange != null) {
1059-
saveConfigurationEvent(userId, null, EventTypes.EVENT_ZONE_CREATE, "Successfully created new zone with name: " + zoneName + ".", "dcId=" + zone.getId(), "dns1=" + dns1, "dns2=" + dns2, "internalDns1=" + internalDns1, "internalDns2=" + internalDns2, "vnetRange=" + vnetRange, "guestCidr=" + guestCidr);
1060-
} else {
1061-
saveConfigurationEvent(userId, null, EventTypes.EVENT_ZONE_CREATE, "Successfully created new zone with name: " + zoneName + ".", "dcId=" + zone.getId(), "dns1=" + dns1, "dns2=" + dns2, "internalDns1=" + internalDns1, "internalDns2=" + internalDns2, "guestCidr=" + guestCidr);
1062-
}
1063-
return zone;
1058+
// Add vnet entries for the new zone if zone type is Advanced
1059+
if (vnetRange != null) {
1060+
_zoneDao.addVnet(zone.getId(), vnetStart, vnetEnd);
1061+
}
1062+
1063+
//if zone is basic, create a untagged network
1064+
if (zone != null && zone.getNetworkType() == NetworkType.Basic) {
1065+
//Create network
1066+
DataCenterDeployment plan = new DataCenterDeployment(zone.getId(), null, null, null);
1067+
NetworkVO userNetwork = new NetworkVO();
1068+
userNetwork.setBroadcastDomainType(BroadcastDomainType.Native);
1069+
1070+
Account systemAccount = _accountDao.findById(Account.ACCOUNT_ID_SYSTEM);
1071+
1072+
List<NetworkOfferingVO> networkOffering = _networkOfferingDao.findByType(GuestIpType.DirectPodBased);
1073+
if (networkOffering == null || networkOffering.isEmpty()) {
1074+
throw new CloudRuntimeException("No default DirectPodBased network offering is found");
1075+
}
1076+
1077+
List<NetworkVO> networks = _networkMgr.setupNetworkConfiguration(systemAccount, networkOffering.get(0), userNetwork, plan, null, null, true);
1078+
1079+
if (networks == null || networks.isEmpty()) {
1080+
txn.rollback();
1081+
throw new CloudRuntimeException("Fail to create a network");
1082+
}
1083+
}
1084+
1085+
if (vnetRange != null) {
1086+
saveConfigurationEvent(userId, null, EventTypes.EVENT_ZONE_CREATE, "Successfully created new zone with name: " + zoneName + ".", "dcId=" + zone.getId(), "dns1=" + dns1, "dns2=" + dns2, "internalDns1=" + internalDns1, "internalDns2=" + internalDns2, "vnetRange=" + vnetRange, "guestCidr=" + guestCidr);
1087+
} else {
1088+
saveConfigurationEvent(userId, null, EventTypes.EVENT_ZONE_CREATE, "Successfully created new zone with name: " + zoneName + ".", "dcId=" + zone.getId(), "dns1=" + dns1, "dns2=" + dns2, "internalDns1=" + internalDns1, "internalDns2=" + internalDns2, "guestCidr=" + guestCidr);
1089+
}
1090+
1091+
txn.commit();
1092+
return zone;
1093+
} catch (Exception ex) {
1094+
txn.rollback();
1095+
s_logger.warn("Exception: ", ex);
1096+
throw new CloudRuntimeException("Fail to create a network");
1097+
}finally {
1098+
txn.close();
1099+
}
1100+
10641101
}
10651102

10661103
@Override
@@ -1079,13 +1116,13 @@ public DataCenter createZone(CreateZoneCmd cmd) {
10791116
Boolean isBasic = false;
10801117

10811118

1082-
if (!(type.equalsIgnoreCase(DataCenterNetworkType.Basic.toString())) && !(type.equalsIgnoreCase(DataCenterNetworkType.Advanced.toString()))) {
1119+
if (!(type.equalsIgnoreCase(NetworkType.Basic.toString())) && !(type.equalsIgnoreCase(NetworkType.Advanced.toString()))) {
10831120
throw new InvalidParameterValueException("Invalid zone type; only Advanced and Basic values are supported");
1084-
} else if (type.endsWith(DataCenterNetworkType.Basic.toString())) {
1121+
} else if (type.endsWith(NetworkType.Basic.toString())) {
10851122
isBasic = true;
10861123
}
10871124

1088-
DataCenterNetworkType zoneType = isBasic ? DataCenterNetworkType.Basic : DataCenterNetworkType.Advanced;
1125+
NetworkType zoneType = isBasic ? NetworkType.Basic : NetworkType.Advanced;
10891126
DomainVO domainVO = null;
10901127

10911128
if (userId == null) {
@@ -1097,10 +1134,11 @@ public DataCenter createZone(CreateZoneCmd cmd) {
10971134
}
10981135

10991136
//Verify zone type
1100-
if (zoneType == DataCenterNetworkType.Basic && vnetRange != null) {
1137+
if (zoneType == NetworkType.Basic && vnetRange != null) {
11011138
vnetRange = null;
11021139
}
1103-
return createZone(userId, zoneName, dns1, dns2, internalDns1, internalDns2, vnetRange, guestCidr, domainVO != null ? domainVO.getName() : null, domainId, zoneType);
1140+
1141+
return createZone(userId, zoneName, dns1, dns2, internalDns1, internalDns2, vnetRange, guestCidr, domainVO != null ? domainVO.getName() : null, domainId, zoneType);
11041142
}
11051143

11061144
@Override
@@ -1483,9 +1521,9 @@ public Vlan createVlanAndPublicIpRange(Long userId, Long zoneId, Long podId, Str
14831521
}
14841522

14851523
//Allow adding untagged direct vlan only for Basic zone
1486-
if (zone.getNetworkType() == DataCenterNetworkType.Advanced && vlanId.equals(Vlan.UNTAGGED) && !forVirtualNetwork) {
1524+
if (zone.getNetworkType() == NetworkType.Advanced && vlanId.equals(Vlan.UNTAGGED) && !forVirtualNetwork) {
14871525
throw new InvalidParameterValueException("Direct untagged network is not supported for the zone " + zone.getId() + " of type " + zone.getNetworkType());
1488-
} else if (zone.getNetworkType() == DataCenterNetworkType.Basic && !(vlanId.equals(Vlan.UNTAGGED) && !forVirtualNetwork)) {
1526+
} else if (zone.getNetworkType() == NetworkType.Basic && !(vlanId.equals(Vlan.UNTAGGED) && !forVirtualNetwork)) {
14891527
throw new InvalidParameterValueException("Only direct untagged network is supported in the zone " + zone.getId() + " of type " + zone.getNetworkType());
14901528
}
14911529

server/src/com/cloud/dc/DataCenterVO.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public class DataCenterVO implements DataCenter {
7474

7575
@Column(name="networktype")
7676
@Enumerated(EnumType.STRING)
77-
DataCenterNetworkType networkType;
77+
NetworkType networkType;
7878

7979
@Column(name="dns_provider")
8080
private String dnsProvider = "VirtualRouter";
@@ -146,12 +146,12 @@ public void setFirewallProvider(String firewallProvider) {
146146
this.firewallProvider = firewallProvider;
147147
}
148148

149-
public DataCenterVO(long id, String name, String description, String dns1, String dns2, String dns3, String dns4, String vnet, String guestCidr, String domain, Long domainId, DataCenterNetworkType zoneType) {
149+
public DataCenterVO(long id, String name, String description, String dns1, String dns2, String dns3, String dns4, String vnet, String guestCidr, String domain, Long domainId, NetworkType zoneType) {
150150
this(name, description, dns1, dns2, dns3, dns4, vnet, guestCidr, domain, domainId, zoneType);
151151
this.id = id;
152152
}
153153

154-
public DataCenterVO(String name, String description, String dns1, String dns2, String dns3, String dns4, String vnet, String guestCidr, String domain, Long domainId, DataCenterNetworkType zoneType) {
154+
public DataCenterVO(String name, String description, String dns1, String dns2, String dns3, String dns4, String vnet, String guestCidr, String domain, Long domainId, NetworkType zoneType) {
155155
this.name = name;
156156
this.description = description;
157157
this.dns1 = dns1;
@@ -294,12 +294,12 @@ public void setDomain(String domain) {
294294
this.domain = domain;
295295
}
296296

297-
public void setNetworkType(DataCenterNetworkType zoneNetworkType) {
297+
public void setNetworkType(NetworkType zoneNetworkType) {
298298
this.networkType = zoneNetworkType;
299299
}
300300

301301
@Override
302-
public DataCenterNetworkType getNetworkType() {
302+
public NetworkType getNetworkType() {
303303
return networkType;
304304
}
305305

server/src/com/cloud/network/NetworkManagerImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
import com.cloud.deploy.DataCenterDeployment;
7171
import com.cloud.deploy.DeployDestination;
7272
import com.cloud.deploy.DeploymentPlan;
73-
import com.cloud.domain.DomainVO;
7473
import com.cloud.domain.dao.DomainDao;
7574
import com.cloud.event.EventTypes;
7675
import com.cloud.event.EventUtils;
@@ -756,8 +755,11 @@ public boolean configure(final String name, final Map<String, Object> params) th
756755

757756
NetworkOfferingVO defaultGuestNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, GuestIpType.Virtual, false, false, rateMbps, multicastRateMbps, null, true);
758757
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestNetworkOffering);
759-
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Guest, GuestIpType.Direct, false, true, rateMbps, multicastRateMbps, null, true);
758+
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Guest, GuestIpType.Direct, false, false, rateMbps, multicastRateMbps, null, true);
760759
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestDirectNetworkOffering);
760+
NetworkOfferingVO defaultGuestDirectPodBasedNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectPodBasedNetworkOffering, "DirectPodBased", TrafficType.Guest, GuestIpType.DirectPodBased, true, false, rateMbps, multicastRateMbps, null, true);
761+
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestDirectPodBasedNetworkOffering);
762+
761763

762764
AccountsUsingNetworkConfigurationSearch = _accountDao.createSearchBuilder();
763765
SearchBuilder<NetworkAccountVO> networkAccountSearch = _networkConfigDao.createSearchBuilderForAccount();

server/src/com/cloud/network/guru/GuestNetworkGuru.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ protected GuestNetworkGuru() {
7171

7272
@Override
7373
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
74-
if (offering.getTrafficType() != TrafficType.Guest) {
74+
if (offering.getTrafficType() != TrafficType.Guest || offering.getGuestIpType() != GuestIpType.Virtual) {
7575
return null;
7676
}
7777

server/src/com/cloud/offerings/dao/NetworkOfferingDao.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.List;
77

8+
import com.cloud.offering.NetworkOffering.GuestIpType;
89
import com.cloud.offerings.NetworkOfferingVO;
910
import com.cloud.service.ServiceOfferingVO;
1011
import com.cloud.utils.db.GenericDao;
@@ -35,4 +36,6 @@ public interface NetworkOfferingDao extends GenericDao<NetworkOfferingVO, Long>
3536
NetworkOfferingVO findByServiceOffering(ServiceOfferingVO offering);
3637

3738
List<NetworkOfferingVO> listNonSystemNetworkOfferings();
39+
40+
List<NetworkOfferingVO> findByType(GuestIpType type);
3841
}

server/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.apache.log4j.Logger;
1313

14+
import com.cloud.offering.NetworkOffering.GuestIpType;
1415
import com.cloud.offerings.NetworkOfferingVO;
1516
import com.cloud.service.ServiceOfferingVO;
1617
import com.cloud.utils.db.DB;
@@ -27,6 +28,7 @@ public class NetworkOfferingDaoImpl extends GenericDaoBase<NetworkOfferingVO, Lo
2728
final SearchBuilder<NetworkOfferingVO> NameSearch;
2829
final SearchBuilder<NetworkOfferingVO> ServiceOfferingSearch;
2930
final SearchBuilder<NetworkOfferingVO> SystemOfferingSearch;
31+
final SearchBuilder<NetworkOfferingVO> TypeSearch;
3032

3133
protected NetworkOfferingDaoImpl() {
3234
super();
@@ -35,6 +37,10 @@ protected NetworkOfferingDaoImpl() {
3537
NameSearch.and("name", NameSearch.entity().getName(), SearchCriteria.Op.EQ);
3638
NameSearch.done();
3739

40+
TypeSearch = createSearchBuilder();
41+
TypeSearch.and("guestIpType", TypeSearch.entity().getGuestIpType(), SearchCriteria.Op.EQ);
42+
TypeSearch.done();
43+
3844
ServiceOfferingSearch = createSearchBuilder();
3945
ServiceOfferingSearch.and("serviceoffering", ServiceOfferingSearch.entity().getGuestIpType(), SearchCriteria.Op.EQ);
4046
ServiceOfferingSearch.done();
@@ -100,4 +106,10 @@ public List<NetworkOfferingVO> listNonSystemNetworkOfferings() {
100106
sc.setParameters("system", false);
101107
return this.listIncludingRemovedBy(sc, null);
102108
}
109+
110+
public List<NetworkOfferingVO> findByType(GuestIpType type) {
111+
SearchCriteria<NetworkOfferingVO> sc = TypeSearch.create();
112+
sc.setParameters("guestIpType", type);
113+
return listBy(sc);
114+
}
103115
}

0 commit comments

Comments
 (0)