diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index b5d2de69a70..68770e5dff8 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1149,12 +1149,29 @@ public class ApiResponseHelper implements ResponseGenerator { vmResponse.setLinkLocalIp(singleNicProfile.getIp4Address()); vmResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress()); vmResponse.setLinkLocalNetmask(singleNicProfile.getNetmask()); - } else if (network.getTrafficType() == TrafficType.Public || network.getTrafficType() == TrafficType.Guest) { - /*In basic zone, public ip has TrafficType.Guest*/ + } else if (network.getTrafficType() == TrafficType.Public) { vmResponse.setPublicIp(singleNicProfile.getIp4Address()); vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress()); vmResponse.setPublicNetmask(singleNicProfile.getNetmask()); vmResponse.setGateway(singleNicProfile.getGateway()); + } else if (network.getTrafficType() == TrafficType.Guest) { + /* + * In basic zone, public ip has TrafficType.Guest in case EIP service is not enabled. + * When EIP service is enabled in the basic zone, system VM by default get the public + * IP allocated for EIP. So return the guest/public IP accordingly. + * */ + NetworkOffering networkOffering = ApiDBUtils.findNetworkOfferingById(network.getNetworkOfferingId()); + if (networkOffering.getElasticIp()) { + IpAddress ip = ApiDBUtils.findIpByAssociatedVmId(vm.getId()); + if (ip != null) { + vmResponse.setPublicIp(ip.getAddress().addr()); + } + } else { + vmResponse.setPublicIp(singleNicProfile.getIp4Address()); + vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress()); + vmResponse.setPublicNetmask(singleNicProfile.getNetmask()); + vmResponse.setGateway(singleNicProfile.getGateway()); + } } } }