@@ -4772,6 +4772,18 @@ public NicVO doInTransaction(TransactionStatus status) {
47724772 }
47734773 });
47744774
4775+ if (selectedIp != null && GuestType .Shared .equals (network .getGuestType ())) {
4776+ IPAddressVO ipAddressVO = _ipAddressDao .findByIpAndSourceNetworkId (network .getId (), selectedIp );
4777+ if (ipAddressVO != null && IpAddress .State .Free .equals (ipAddressVO .getState ())) {
4778+ ipAddressVO .setState (IPAddressVO .State .Allocated );
4779+ ipAddressVO .setAllocatedTime (new Date ());
4780+ Account account = _accountDao .findById (vm .getAccountId ());
4781+ ipAddressVO .setAllocatedInDomainId (account .getDomainId ());
4782+ ipAddressVO .setAllocatedToAccountId (account .getId ());
4783+ _ipAddressDao .update (ipAddressVO .getId (), ipAddressVO );
4784+ }
4785+ }
4786+
47754787 final Integer networkRate = _networkModel .getNetworkRate (network .getId (), vm .getId ());
47764788 final NicProfile vmNic = new NicProfile (vo , network , vo .getBroadcastUri (), vo .getIsolationUri (), networkRate , _networkModel .isSecurityGroupSupportedInNetwork (network ),
47774789 _networkModel .getNetworkTag (vm .getHypervisorType (), network ));
@@ -4783,15 +4795,15 @@ protected String getSelectedIpForNicImport(Network network, DataCenter dataCente
47834795 if (network .getGuestType () == GuestType .L2 ) {
47844796 return null ;
47854797 }
4786- return dataCenter . getNetworkType () == NetworkType . Basic ?
4787- getSelectedIpForNicImportOnBasicZone (ipAddresses .getIp4Address (), network , dataCenter ):
4798+ return GuestType . Shared . equals ( network . getGuestType ()) ?
4799+ getSelectedIpForNicImportOnSharedNetwork (ipAddresses .getIp4Address (), network , dataCenter ):
47884800 _ipAddrMgr .acquireGuestIpAddress (network , ipAddresses .getIp4Address ());
47894801 }
47904802
4791- protected String getSelectedIpForNicImportOnBasicZone (String requestedIp , Network network , DataCenter dataCenter ) {
4803+ protected String getSelectedIpForNicImportOnSharedNetwork (String requestedIp , Network network , DataCenter dataCenter ) {
47924804 IPAddressVO ipAddressVO = StringUtils .isBlank (requestedIp ) ?
47934805 _ipAddressDao .findBySourceNetworkIdAndDatacenterIdAndState (network .getId (), dataCenter .getId (), IpAddress .State .Free ):
4794- _ipAddressDao .findByIp ( requestedIp );
4806+ _ipAddressDao .findByIpAndSourceNetworkId ( network . getId (), requestedIp );
47954807 if (ipAddressVO == null || ipAddressVO .getState () != IpAddress .State .Free ) {
47964808 String msg = String .format ("Cannot find a free IP to assign to VM NIC on network %s" , network .getName ());
47974809 logger .error (msg );
0 commit comments