@@ -607,22 +607,32 @@ public Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForVpc(Vpc vpc, Integer vp
607607 }
608608
609609 protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , Long ownerDomainId , Long ownerAccountId , Long zoneId ) {
610- validateNetworkCidrSize (ownerAccountId , cidrSize );
610+ validateNetworkCidrSize (cidrSize );
611611 List <DataCenterIpv4GuestSubnetVO > subnets = getZoneSubnetsForAccount (ownerDomainId , ownerAccountId , zoneId );
612612 for (DataCenterIpv4GuestSubnetVO subnet : subnets ) {
613- Ipv4GuestSubnetNetworkMap result = getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
613+ Ipv4GuestSubnetNetworkMap result = getIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
614+ if (result != null ) {
615+ return result ;
616+ }
617+ }
618+ Boolean isAutoAllocationEnabled = RoutedIPv4NetworkCidrAutoAllocationEnabled .valueIn (ownerAccountId );
619+ if (!Boolean .TRUE .equals (isAutoAllocationEnabled )) {
620+ throw new CloudRuntimeException ("CIDR auto-allocation is disabled for this account" );
621+ }
622+ for (DataCenterIpv4GuestSubnetVO subnet : subnets ) {
623+ Ipv4GuestSubnetNetworkMap result = createIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
614624 if (result != null ) {
615625 return result ;
616626 }
617627 }
618628 return null ;
619629 }
620630
621- protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
622- Ipv4GuestSubnetNetworkMap map = ipv4GuestSubnetNetworkMapDao .findFirstAvailable (subnet .getId (), cidrSize );
623- if ( map != null ) {
624- return map ;
625- }
631+ protected Ipv4GuestSubnetNetworkMap getIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
632+ return ipv4GuestSubnetNetworkMapDao .findFirstAvailable (subnet .getId (), cidrSize );
633+ }
634+
635+ protected Ipv4GuestSubnetNetworkMap createIpv4SubnetForGuestNetworkOrVpcInternal ( Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
626636 try {
627637 return createIpv4SubnetFromParentSubnet (subnet , cidrSize );
628638 } catch (Exception ex ) {
@@ -631,6 +641,14 @@ protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInt
631641 return null ;
632642 }
633643
644+ protected Ipv4GuestSubnetNetworkMap getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (Integer cidrSize , DataCenterIpv4GuestSubnetVO subnet ) {
645+ Ipv4GuestSubnetNetworkMap map = getIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
646+ if (map != null ) {
647+ return map ;
648+ }
649+ return createIpv4SubnetForGuestNetworkOrVpcInternal (cidrSize , subnet );
650+ }
651+
634652 protected void getOrCreateIpv4SubnetForGuestNetworkOrVpcInternal (String networkCidr , Long ownerDomainId , Long ownerAccountId , Long zoneId ) {
635653 Ipv4GuestSubnetNetworkMapVO subnetMap = ipv4GuestSubnetNetworkMapDao .findBySubnet (networkCidr );
636654 if (subnetMap != null ) {
@@ -693,14 +711,10 @@ private void checkConflicts(List<Ipv4GuestSubnetNetworkMapVO> subnetsForNetwork,
693711 }
694712 }
695713
696- private void validateNetworkCidrSize (long accountId , Integer networkCidrSize ) {
714+ private void validateNetworkCidrSize (Integer networkCidrSize ) {
697715 if (networkCidrSize == null ) {
698716 throw new CloudRuntimeException ("network/vpc CidrSize is null" );
699717 }
700- Boolean isAutoAllocationEnabled = RoutedIPv4NetworkCidrAutoAllocationEnabled .valueIn (accountId );
701- if (!Boolean .TRUE .equals (isAutoAllocationEnabled )) {
702- throw new CloudRuntimeException ("CIDR auto-allocation is disabled for this account" );
703- }
704718 }
705719
706720 private List <DataCenterIpv4GuestSubnetVO > getZoneSubnetsForAccount (long domainId , long accountId , long zoneId ) {
0 commit comments