diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
index d9c1eff8ff8..2ca828820fd 100644
--- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
@@ -1372,7 +1372,7 @@ public class ApiConstants {
public static final String DISABLED = "disabled";
public static final String CONTENT_TYPE = "Content-Type";
public static final String NATIVE_ZONE = "Native";
- public static final String NIC_DNS_RECORD = "nicdnsrecord";
+ public static final String NIC_DNS_NAME = "nicdnsname";
public static final String TIME_STAMP = "timestamp";
public static final String INSTANCE_ID = "instanceId";
public static final String OLD_STATE = "oldState";
diff --git a/api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java
index 3f6451d1c66..ad09380e2a4 100644
--- a/api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/NicResponse.java
@@ -150,9 +150,9 @@ public class NicResponse extends BaseResponse {
@Param(description = "whether the NIC is enabled or not")
private Boolean isEnabled;
- @SerializedName("dnsrecordurl")
+ @SerializedName(ApiConstants.NIC_DNS_NAME)
@Param(description = "Public IP address associated with this NIC via Static NAT rule")
- private String dnsRecordUrl;
+ private String nicDnsName;
public void setVmId(String vmId) {
this.vmId = vmId;
@@ -433,7 +433,7 @@ public class NicResponse extends BaseResponse {
isEnabled = enabled;
}
- public void setDnsRecordUrl(String dnsRecordUrl) {
- this.dnsRecordUrl = dnsRecordUrl;
+ public void setNicDnsName(String nicDnsName) {
+ this.nicDnsName = nicDnsName;
}
}
diff --git a/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml b/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
index 61fb30d8657..4720137b568 100644
--- a/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
+++ b/engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml
@@ -317,6 +317,6 @@
-
+
diff --git a/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql b/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
index 969bdad03a8..40ddb250879 100644
--- a/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
+++ b/engine/schema/src/main/resources/META-INF/db/views/cloud.user_vm_view.sql
@@ -143,7 +143,7 @@ SELECT
`nics`.`broadcast_uri` AS `broadcast_uri`,
`nics`.`isolation_uri` AS `isolation_uri`,
`nics`.`enabled` AS `is_nic_enabled`,
- `nic_details`.`value` AS `dns_record_url`,
+ `nic_details`.`value` AS `nic_dns_name`,
`vpc`.`id` AS `vpc_id`,
`vpc`.`uuid` AS `vpc_uuid`,
`networks`.`uuid` AS `network_uuid`,
@@ -215,7 +215,7 @@ FROM
LEFT JOIN `user_data` ON ((`user_data`.`id` = `user_vm`.`user_data_id`)))
LEFT JOIN `nics` ON (((`vm_instance`.`id` = `nics`.`instance_id`)
AND ISNULL(`nics`.`removed`))))
- LEFT JOIN `nic_details` ON ((`nic_details`.`nic_id` = `nics`.`id`) AND (`nic_details`.`name` = 'nicdnsrecord')))
+ LEFT JOIN `nic_details` ON ((`nic_details`.`nic_id` = `nics`.`id`) AND (`nic_details`.`name` = 'nicdnsname')))
LEFT JOIN `networks` ON ((`nics`.`network_id` = `networks`.`id`)))
LEFT JOIN `vpc` ON (((`networks`.`vpc_id` = `vpc`.`id`)
AND ISNULL(`vpc`.`removed`))))
diff --git a/engine/schema/src/main/resources/META-INF/db/views/cloud.dns_nic_view.sql b/engine/schema/src/main/resources/META-INF/db/views/nic_dns_view.sql
similarity index 89%
rename from engine/schema/src/main/resources/META-INF/db/views/cloud.dns_nic_view.sql
rename to engine/schema/src/main/resources/META-INF/db/views/nic_dns_view.sql
index 6506434a319..3ae24098871 100644
--- a/engine/schema/src/main/resources/META-INF/db/views/cloud.dns_nic_view.sql
+++ b/engine/schema/src/main/resources/META-INF/db/views/nic_dns_view.sql
@@ -15,10 +15,10 @@
-- specific language governing permissions and limitations
-- under the License.
--- VIEW `cloud`.`dns_nic_view`;
+-- VIEW `cloud`.`nic_dns_view`;
-DROP VIEW IF EXISTS `cloud`.`dns_nic_view`;
-CREATE VIEW `cloud`.`dns_nic_view` AS
+DROP VIEW IF EXISTS `cloud`.`nic_dns_view`;
+CREATE VIEW `cloud`.`nic_dns_view` AS
SELECT
n.id AS id,
n.uuid AS uuid,
@@ -27,7 +27,7 @@ SELECT
n.ip4_address AS ip4_address,
n.ip6_address AS ip6_address,
n.removed AS removed,
- nd.value AS nic_dns_url,
+ nd.value AS nic_dns_name,
map.dns_zone_id AS dns_zone_id,
map.sub_domain AS sub_domain
FROM
@@ -35,6 +35,6 @@ FROM
INNER JOIN
`cloud`.`dns_zone_network_map` map ON n.network_id = map.network_id
LEFT JOIN
- `cloud`.`nic_details` nd ON n.id = nd.nic_id AND nd.name = 'nicdnsrecord'
+ `cloud`.`nic_details` nd ON n.id = nd.nic_id AND nd.name = 'nicdnsname'
WHERE
map.removed IS NULL;
diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index 94cd8f03fc9..e544e68ddb1 100644
--- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -360,7 +360,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation dnsRecordNames = records.stream().map(DnsRecord::getName).filter(Objects::nonNull)
.map(name -> name.replaceAll("\\.+$", ""))
.collect(Collectors.toList());
- nicDetailsDao.removeDetailsForValuesIn(ApiConstants.NIC_DNS_RECORD, dnsRecordNames);
+ nicDetailsDao.removeDetailsForValuesIn(ApiConstants.NIC_DNS_NAME, dnsRecordNames);
}
} catch (Exception ex) {
logger.warn("Failed to fetch DNS records for dnsZone: {}, perform manual cleanup.", dnsZoneName, ex);
@@ -882,13 +882,13 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
logger.debug("Instance is not found for the given ID: {}", instanceId);
return;
}
- List mappedNics = dnsNicJoinDao.listActiveByVmId(instanceId);
+ List mappedNics = nicDnsJoinDao.listActiveByVmId(instanceId);
if (CollectionUtils.isEmpty(mappedNics)) {
logger.debug("No active DNS zone associated to NICs");
return;
}
- Map>> dnsZoneRecordNicMap = new HashMap<>();
- for (DnsNicJoinVO nic : mappedNics) {
+ Map>> dnsZoneRecordNicMap = new HashMap<>();
+ for (NicDnsJoinVO nic : mappedNics) {
DnsZoneVO targetZone = dnsZoneDao.findById(nic.getDnsZoneId());
if (targetZone == null) {
continue;
@@ -899,11 +899,11 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
.add(nic);
}
- for (Map.Entry>> zoneEntry : dnsZoneRecordNicMap.entrySet()) {
+ for (Map.Entry>> zoneEntry : dnsZoneRecordNicMap.entrySet()) {
long targetZoneId = zoneEntry.getKey();
- for (Map.Entry> dnsUrlEntry : zoneEntry.getValue().entrySet()) {
+ for (Map.Entry> dnsUrlEntry : zoneEntry.getValue().entrySet()) {
String dnsRecordUrl = dnsUrlEntry.getKey();
- List nicsForThisFqdn = dnsUrlEntry.getValue();
+ List nicsForThisFqdn = dnsUrlEntry.getValue();
try {
Transaction.execute(new TransactionCallbackWithExceptionNoReturn() {
@Override
@@ -911,8 +911,8 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
if (isDnsCollision(dnsRecordUrl, targetZoneId, instanceId)) {
return;
}
- for (DnsNicJoinVO nic : nicsForThisFqdn) {
- nicDetailsDao.addDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD, dnsRecordUrl, true);
+ for (NicDnsJoinVO nic : nicsForThisFqdn) {
+ nicDetailsDao.addDetail(nic.getId(), ApiConstants.NIC_DNS_NAME, dnsRecordUrl, true);
}
syncDnsRecordsState(instanceId, dnsRecordUrl, targetZoneId);
}
@@ -927,34 +927,34 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
}
void handleVmStopAndDestroy(long instanceId) {
- List historicalNics = dnsNicJoinDao.listIncludingRemovedByVmId(instanceId);
+ List historicalNics = nicDnsJoinDao.listIncludingRemovedByVmId(instanceId);
if (CollectionUtils.isEmpty(historicalNics)) {
return;
}
- Map>> groupByDnsZone = new HashMap<>();
- for (DnsNicJoinVO nic : historicalNics) {
+ Map>> groupByDnsZone = new HashMap<>();
+ for (NicDnsJoinVO nic : historicalNics) {
// If the DNS record url is null, it means this NIC was never registered in nic_details
- if (nic.getNicDnsUrl() == null) {
+ if (nic.getNicDnsName() == null) {
continue;
}
groupByDnsZone
.computeIfAbsent(nic.getDnsZoneId(), k -> new HashMap<>())
- .computeIfAbsent(nic.getNicDnsUrl(), k -> new ArrayList<>())
+ .computeIfAbsent(nic.getNicDnsName(), k -> new ArrayList<>())
.add(nic);
}
- for (Map.Entry>> zoneEntry : groupByDnsZone.entrySet()) {
+ for (Map.Entry>> zoneEntry : groupByDnsZone.entrySet()) {
long targetZoneId = zoneEntry.getKey();
- for (Map.Entry> dnsRecordEntry : zoneEntry.getValue().entrySet()) {
+ for (Map.Entry> dnsRecordEntry : zoneEntry.getValue().entrySet()) {
String dnsRecordUrl = dnsRecordEntry.getKey();
- List nicsForDnsUrl = dnsRecordEntry.getValue();
+ List nicsForDnsUrl = dnsRecordEntry.getValue();
try {
Transaction.execute(new TransactionCallbackWithExceptionNoReturn() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) throws DnsProviderException {
- for (DnsNicJoinVO nic : nicsForDnsUrl) {
- nicDetailsDao.removeDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD);
+ for (NicDnsJoinVO nic : nicsForDnsUrl) {
+ nicDetailsDao.removeDetail(nic.getId(), ApiConstants.NIC_DNS_NAME);
}
// Because we just deleted the nic_details, the sync method will naturally
// find 0 active IPs for this VM/FQDN combo and issue a clean DELETE to PowerDNS.
@@ -978,19 +978,19 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
return;
}
- List mappedNics = dnsNicJoinDao.listActiveByVmId(instanceId);
+ List mappedNics = nicDnsJoinDao.listActiveByVmId(instanceId);
if (CollectionUtils.isEmpty(mappedNics)) {
return;
}
- Map>> dnsZoneNewRecordNicMap = new HashMap<>();
- for (DnsNicJoinVO nic : mappedNics) {
+ Map>> dnsZoneNewRecordNicMap = new HashMap<>();
+ for (NicDnsJoinVO nic : mappedNics) {
DnsZoneVO targetZone = dnsZoneDao.findById(nic.getDnsZoneId());
if (targetZone == null) {
continue;
}
- String oldDnsRecordUrl = nic.getNicDnsUrl();
+ String oldDnsRecordUrl = nic.getNicDnsName();
String newDnsRecordUrl = prepareDnsRecordUrl(newHostName, nic.getSubDomain(), targetZone.getName());
if (newDnsRecordUrl.equals(oldDnsRecordUrl)) {
continue;
@@ -1001,22 +1001,22 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
.add(nic);
}
- for (Map.Entry>> zoneEntry : dnsZoneNewRecordNicMap.entrySet()) {
+ for (Map.Entry>> zoneEntry : dnsZoneNewRecordNicMap.entrySet()) {
long targetZoneId = zoneEntry.getKey();
- for (Map.Entry> newUrlEntry : zoneEntry.getValue().entrySet()) {
+ for (Map.Entry> newUrlEntry : zoneEntry.getValue().entrySet()) {
String newDnsRecordUrl = newUrlEntry.getKey();
- List nicsForThisFqdn = newUrlEntry.getValue();
+ List nicsForThisFqdn = newUrlEntry.getValue();
try {
Set oldDnsRecordUrls = new HashSet<>();
Transaction.execute(new TransactionCallbackWithExceptionNoReturn() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) throws DnsProviderException {
- for (DnsNicJoinVO nic : nicsForThisFqdn) {
- if (nic.getNicDnsUrl() != null) {
- oldDnsRecordUrls.add(nic.getNicDnsUrl());
- nicDetailsDao.removeDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD);
+ for (NicDnsJoinVO nic : nicsForThisFqdn) {
+ if (nic.getNicDnsName() != null) {
+ oldDnsRecordUrls.add(nic.getNicDnsName());
+ nicDetailsDao.removeDetail(nic.getId(), ApiConstants.NIC_DNS_NAME);
}
}
for (String oldUrl : oldDnsRecordUrls) {
@@ -1031,8 +1031,8 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
if (isDnsCollision(newDnsRecordUrl, targetZoneId, instanceId)) {
return;
}
- for (DnsNicJoinVO nic : nicsForThisFqdn) {
- nicDetailsDao.addDetail(nic.getId(), ApiConstants.NIC_DNS_RECORD, newDnsRecordUrl, true);
+ for (NicDnsJoinVO nic : nicsForThisFqdn) {
+ nicDetailsDao.addDetail(nic.getId(), ApiConstants.NIC_DNS_NAME, newDnsRecordUrl, true);
}
// This sync call finds the newly written intent and sends an ADD/REPLACE call.
syncDnsRecordsState(instanceId, newDnsRecordUrl, targetZoneId);
@@ -1053,7 +1053,7 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
if (instance == null || instance.getState() != VirtualMachine.State.Running) {
return;
}
- DnsNicJoinVO nic = dnsNicJoinDao.findById(nicId);
+ NicDnsJoinVO nic = nicDnsJoinDao.findById(nicId);
if (nic == null) {
logger.debug("NIC with ID: {} doesn't have DNS zone associated", nicId);
return;
@@ -1073,7 +1073,7 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
if (isDnsCollision(dnsRecordUrl, targetZone.getId(), instanceId)) {
return;
}
- nicDetailsDao.addDetail(nicId, ApiConstants.NIC_DNS_RECORD, dnsRecordUrl, true);
+ nicDetailsDao.addDetail(nicId, ApiConstants.NIC_DNS_NAME, dnsRecordUrl, true);
syncDnsRecordsState(instanceId, dnsRecordUrl, targetZone.getId());
logger.debug("Successfully synced DNS on NIC Plug for: {}", dnsRecordUrl);
}
@@ -1086,18 +1086,18 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
}
void handleNicUnplug(long instanceId, long nicId) {
- DnsNicJoinVO nic = dnsNicJoinDao.findByIdIncludingRemoved(nicId);
- if (nic == null || nic.getNicDnsUrl() == null) {
+ NicDnsJoinVO nic = nicDnsJoinDao.findByIdIncludingRemoved(nicId);
+ if (nic == null || nic.getNicDnsName() == null) {
return;
}
- String dnsRecordUrl = nic.getNicDnsUrl();
+ String dnsRecordUrl = nic.getNicDnsName();
long dnsZoneId = nic.getDnsZoneId();
try {
Transaction.execute(new TransactionCallbackWithExceptionNoReturn() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) throws DnsProviderException {
- nicDetailsDao.removeDetail(nicId, ApiConstants.NIC_DNS_RECORD);
+ nicDetailsDao.removeDetail(nicId, ApiConstants.NIC_DNS_NAME);
syncDnsRecordsState(instanceId, dnsRecordUrl, dnsZoneId);
logger.debug("Successfully synced DNS record: {} on NIC unplug", dnsRecordUrl);
}
@@ -1120,7 +1120,7 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
}
private boolean isDnsCollision(String dnsRecordUrl, long targetZoneId, long instanceId) {
- DnsNicJoinVO existing = dnsNicJoinDao.findActiveByDnsRecordAndZone(dnsRecordUrl, targetZoneId);
+ NicDnsJoinVO existing = nicDnsJoinDao.findActiveByDnsRecordAndZone(dnsRecordUrl, targetZoneId);
if (existing != null && existing.getInstanceId() != instanceId) {
logger.error("DNS collision: cannot register DNS record: {}. Already owned by Instance: {}.",
dnsRecordUrl, existing.getInstanceId());
@@ -1141,11 +1141,11 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
return;
}
DnsServerVO dnsServer = dnsServerDao.findById(dnsZone.getDnsServerId());
- List activeNics = dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(instanceId, dnsZoneId, dnsRecordUrl);
+ List activeNics = nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(instanceId, dnsZoneId, dnsRecordUrl);
List ipv4s = new ArrayList<>();
List ipv6s = new ArrayList<>();
- for (DnsNicJoinVO nic : activeNics) {
+ for (NicDnsJoinVO nic : activeNics) {
if (nic.getIp4Address() != null && !nic.getIp4Address().isEmpty()) {
ipv4s.add(nic.getIp4Address());
}
diff --git a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDao.java b/server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDao.java
similarity index 82%
rename from server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDao.java
rename to server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDao.java
index fc91d34df44..71b1487fba6 100644
--- a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDao.java
+++ b/server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDao.java
@@ -19,11 +19,11 @@ package org.apache.cloudstack.dns.dao;
import java.util.List;
-import org.apache.cloudstack.dns.vo.DnsNicJoinVO;
+import org.apache.cloudstack.dns.vo.NicDnsJoinVO;
import com.cloud.utils.db.GenericDao;
-public interface DnsNicJoinDao extends GenericDao {
+public interface NicDnsJoinDao extends GenericDao {
/**
* Used for Collision Checks.
@@ -31,7 +31,7 @@ public interface DnsNicJoinDao extends GenericDao {
* @param dnsZoneId
* @return active records to see who currently owns the dnsRecordUrl.
*/
- DnsNicJoinVO findActiveByDnsRecordAndZone(String dnsRecordUrl, long dnsZoneId);
+ NicDnsJoinVO findActiveByDnsRecordAndZone(String dnsRecordUrl, long dnsZoneId);
/**
* Used to sync DNS record url based on available ips for vmId in the dnsZone
@@ -40,19 +40,19 @@ public interface DnsNicJoinDao extends GenericDao {
* @param dnsRecordUrl
* @return list of active nics using the dnsRecordUrl, supports null vmId for dnsZone wide query
*/
- List listActiveByVmIdZoneAndDnsRecord(Long vmId, long dnsZoneId, String dnsRecordUrl);
+ List listActiveByVmIdZoneAndDnsRecord(Long vmId, long dnsZoneId, String dnsRecordUrl);
/**
* Used for VM Start/Running
* @param vmId
* @return records associated to vmId
*/
- List listActiveByVmId(long vmId);
+ List listActiveByVmId(long vmId);
/**
* Used by Instance Destroy/Stop or NIC delete
* @param vmId
* @return records with soft-delete
*/
- List listIncludingRemovedByVmId(long vmId);
+ List listIncludingRemovedByVmId(long vmId);
}
diff --git a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDaoImpl.java b/server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDaoImpl.java
similarity index 67%
rename from server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDaoImpl.java
rename to server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDaoImpl.java
index 9fd718f67fe..60bffd25fc4 100644
--- a/server/src/main/java/org/apache/cloudstack/dns/dao/DnsNicJoinDaoImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/dns/dao/NicDnsJoinDaoImpl.java
@@ -20,28 +20,28 @@ package org.apache.cloudstack.dns.dao;
import java.util.List;
import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.dns.vo.DnsNicJoinVO;
+import org.apache.cloudstack.dns.vo.NicDnsJoinVO;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-public class DnsNicJoinDaoImpl extends GenericDaoBase implements DnsNicJoinDao {
- private final SearchBuilder activeDnsRecordZoneSearch;
- private final SearchBuilder activeVmZoneDnsRecordSearch; // Route for null vmId
- private final SearchBuilder activeVmSearch;
+public class NicDnsJoinDaoImpl extends GenericDaoBase implements NicDnsJoinDao {
+ private final SearchBuilder activeDnsRecordZoneSearch;
+ private final SearchBuilder activeVmZoneDnsRecordSearch; // Route for null vmId
+ private final SearchBuilder activeVmSearch;
- public DnsNicJoinDaoImpl() {
+ public NicDnsJoinDaoImpl() {
activeDnsRecordZoneSearch = createSearchBuilder();
- activeDnsRecordZoneSearch.and(ApiConstants.NIC_DNS_RECORD, activeDnsRecordZoneSearch.entity().getNicDnsUrl(), SearchCriteria.Op.EQ);
+ activeDnsRecordZoneSearch.and(ApiConstants.NIC_DNS_NAME, activeDnsRecordZoneSearch.entity().getNicDnsName(), SearchCriteria.Op.EQ);
activeDnsRecordZoneSearch.and(ApiConstants.DNS_ZONE_ID, activeDnsRecordZoneSearch.entity().getDnsZoneId(), SearchCriteria.Op.EQ);
activeDnsRecordZoneSearch.and(ApiConstants.REMOVED, activeDnsRecordZoneSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
activeDnsRecordZoneSearch.done();
activeVmZoneDnsRecordSearch = createSearchBuilder();
activeVmZoneDnsRecordSearch.and(ApiConstants.INSTANCE_ID, activeVmZoneDnsRecordSearch.entity().getInstanceId(), SearchCriteria.Op.EQ);
- activeVmZoneDnsRecordSearch.and(ApiConstants.NIC_DNS_RECORD, activeVmZoneDnsRecordSearch.entity().getNicDnsUrl(), SearchCriteria.Op.EQ);
+ activeVmZoneDnsRecordSearch.and(ApiConstants.NIC_DNS_NAME, activeVmZoneDnsRecordSearch.entity().getNicDnsName(), SearchCriteria.Op.EQ);
activeVmZoneDnsRecordSearch.and(ApiConstants.DNS_ZONE_ID, activeVmZoneDnsRecordSearch.entity().getDnsZoneId(), SearchCriteria.Op.EQ);
activeVmZoneDnsRecordSearch.and(ApiConstants.REMOVED, activeVmZoneDnsRecordSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
activeVmZoneDnsRecordSearch.done();
@@ -52,39 +52,39 @@ public class DnsNicJoinDaoImpl extends GenericDaoBase implem
}
@Override
- public DnsNicJoinVO findActiveByDnsRecordAndZone(String dnsRecordUrl, long dnsZoneId) {
- SearchCriteria sc = activeDnsRecordZoneSearch.create();
- sc.setParameters(ApiConstants.NIC_DNS_RECORD, dnsRecordUrl);
+ public NicDnsJoinVO findActiveByDnsRecordAndZone(String dnsRecordUrl, long dnsZoneId) {
+ SearchCriteria sc = activeDnsRecordZoneSearch.create();
+ sc.setParameters(ApiConstants.NIC_DNS_NAME, dnsRecordUrl);
sc.setParameters(ApiConstants.DNS_ZONE_ID, dnsZoneId);
return findOneBy(sc);
}
@Override
- public List listActiveByVmIdZoneAndDnsRecord(Long vmId, long dnsZoneId, String dnsRecordUrl) {
+ public List listActiveByVmIdZoneAndDnsRecord(Long vmId, long dnsZoneId, String dnsRecordUrl) {
if (vmId != null) {
- SearchCriteria sc = activeDnsRecordZoneSearch.create();
+ SearchCriteria sc = activeDnsRecordZoneSearch.create();
sc.setParameters(ApiConstants.INSTANCE_ID, vmId);
sc.setParameters(ApiConstants.DNS_ZONE_ID, dnsZoneId);
- sc.setParameters(ApiConstants.NIC_DNS_RECORD, dnsRecordUrl);
+ sc.setParameters(ApiConstants.NIC_DNS_NAME, dnsRecordUrl);
return listBy(sc);
} else {
- SearchCriteria sc = activeDnsRecordZoneSearch.create();
- sc.setParameters(ApiConstants.NIC_DNS_RECORD, dnsRecordUrl);
+ SearchCriteria sc = activeDnsRecordZoneSearch.create();
+ sc.setParameters(ApiConstants.NIC_DNS_NAME, dnsRecordUrl);
sc.setParameters(ApiConstants.DNS_ZONE_ID, dnsZoneId);
return listBy(sc);
}
}
@Override
- public List listActiveByVmId(long vmId) {
- SearchCriteria sc = activeVmSearch.create();
+ public List listActiveByVmId(long vmId) {
+ SearchCriteria sc = activeVmSearch.create();
sc.setParameters(ApiConstants.INSTANCE_ID, vmId);
return listBy(sc);
}
@Override
- public List listIncludingRemovedByVmId(long vmId) {
- SearchCriteria sc = activeVmSearch.create();
+ public List listIncludingRemovedByVmId(long vmId) {
+ SearchCriteria sc = activeVmSearch.create();
sc.setParameters(ApiConstants.INSTANCE_ID, vmId);
return listIncludingRemovedBy(sc);
}
diff --git a/server/src/main/java/org/apache/cloudstack/dns/vo/DnsNicJoinVO.java b/server/src/main/java/org/apache/cloudstack/dns/vo/NicDnsJoinVO.java
similarity index 90%
rename from server/src/main/java/org/apache/cloudstack/dns/vo/DnsNicJoinVO.java
rename to server/src/main/java/org/apache/cloudstack/dns/vo/NicDnsJoinVO.java
index 7396c86949f..893e53188f2 100644
--- a/server/src/main/java/org/apache/cloudstack/dns/vo/DnsNicJoinVO.java
+++ b/server/src/main/java/org/apache/cloudstack/dns/vo/NicDnsJoinVO.java
@@ -34,8 +34,8 @@ import org.apache.cloudstack.api.InternalIdentity;
import com.cloud.api.query.vo.BaseViewVO;
@Entity
-@Table(name = "dns_nic_view")
-public class DnsNicJoinVO extends BaseViewVO implements InternalIdentity, Identity {
+@Table(name = "nic_dns_view")
+public class NicDnsJoinVO extends BaseViewVO implements InternalIdentity, Identity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@@ -56,8 +56,8 @@ public class DnsNicJoinVO extends BaseViewVO implements InternalIdentity, Identi
@Column(name = "ip6_address")
private String ip6Address;
- @Column(name = "nic_dns_url")
- private String nicDnsUrl;
+ @Column(name = "nic_dns_name")
+ private String nicDnsName;
@Column(name = "dns_zone_id")
private long dnsZoneId;
@@ -68,7 +68,7 @@ public class DnsNicJoinVO extends BaseViewVO implements InternalIdentity, Identi
@Column(name = "removed")
private Date removed;
- public DnsNicJoinVO() {
+ public NicDnsJoinVO() {
}
@Override
@@ -97,8 +97,8 @@ public class DnsNicJoinVO extends BaseViewVO implements InternalIdentity, Identi
return subDomain;
}
- public String getNicDnsUrl() {
- return nicDnsUrl;
+ public String getNicDnsName() {
+ return nicDnsName;
}
public String getIp4Address() {
diff --git a/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
index 26a1a1b7ac3..522eba2caf0 100644
--- a/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
+++ b/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
@@ -52,7 +52,7 @@ import org.apache.cloudstack.api.response.DnsZoneNetworkMapResponse;
import org.apache.cloudstack.api.response.DnsZoneResponse;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.dns.dao.DnsNicJoinDao;
+import org.apache.cloudstack.dns.dao.NicDnsJoinDao;
import org.apache.cloudstack.dns.dao.DnsServerDao;
import org.apache.cloudstack.dns.dao.DnsServerJoinDao;
import org.apache.cloudstack.dns.dao.DnsZoneDao;
@@ -67,6 +67,7 @@ import org.apache.cloudstack.dns.vo.DnsServerVO;
import org.apache.cloudstack.dns.vo.DnsZoneJoinVO;
import org.apache.cloudstack.dns.vo.DnsZoneNetworkMapVO;
import org.apache.cloudstack.dns.vo.DnsZoneVO;
+import org.apache.cloudstack.dns.vo.NicDnsJoinVO;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.junit.After;
import org.junit.Before;
@@ -127,7 +128,7 @@ public class DnsProviderManagerImplTest {
@Mock
NicDetailsDao nicDetailsDao;
@Mock
- DnsNicJoinDao dnsNicJoinDao;
+ NicDnsJoinDao nicDnsJoinDao;
@Mock
MessageBus messageBus;
@Mock
@@ -896,9 +897,9 @@ public class DnsProviderManagerImplTest {
event.put(org.apache.cloudstack.api.ApiConstants.OLD_STATE, com.cloud.vm.VirtualMachine.State.Running);
event.put(org.apache.cloudstack.api.ApiConstants.NEW_STATE, com.cloud.vm.VirtualMachine.State.Stopped);
event.put(org.apache.cloudstack.api.ApiConstants.INSTANCE_ID, 15L);
- when(dnsNicJoinDao.listIncludingRemovedByVmId(15L)).thenReturn(null);
+ when(nicDnsJoinDao.listIncludingRemovedByVmId(15L)).thenReturn(null);
subscriber.onPublishMessage("sender", "subject", event);
- verify(dnsNicJoinDao, times(1)).listIncludingRemovedByVmId(15L);
+ verify(nicDnsJoinDao, times(1)).listIncludingRemovedByVmId(15L);
}
@Test
@@ -943,9 +944,9 @@ public class DnsProviderManagerImplTest {
event.put(org.apache.cloudstack.api.ApiConstants.EVENT_TYPE, com.cloud.event.EventTypes.EVENT_NIC_DELETE);
event.put(org.apache.cloudstack.api.ApiConstants.NIC_ID, 101L);
event.put(org.apache.cloudstack.api.ApiConstants.INSTANCE_ID, 201L);
- when(dnsNicJoinDao.findByIdIncludingRemoved(101L)).thenReturn(null);
+ when(nicDnsJoinDao.findByIdIncludingRemoved(101L)).thenReturn(null);
subscriber.onPublishMessage("sender", "subject", event);
- verify(dnsNicJoinDao, times(1)).findByIdIncludingRemoved(101L);
+ verify(nicDnsJoinDao, times(1)).findByIdIncludingRemoved(101L);
}
@Test
@@ -1035,7 +1036,7 @@ public class DnsProviderManagerImplTest {
public void testSyncDnsRecordsStateNoIpv4AndNoIpv6DeletesBothRecords() throws Exception {
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(anyLong(), anyLong(), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(anyLong(), anyLong(), anyString()))
.thenReturn(Collections.emptyList());
manager.syncDnsRecordsState(1L, "myvm.example.com", ZONE_ID);
@@ -1049,10 +1050,10 @@ public class DnsProviderManagerImplTest {
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nic = mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nic = mock(NicDnsJoinVO.class);
when(nic.getIp4Address()).thenReturn("10.0.0.1");
when(nic.getIp6Address()).thenReturn(null);
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(anyLong(), anyLong(), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(anyLong(), anyLong(), anyString()))
.thenReturn(Collections.singletonList(nic));
manager.syncDnsRecordsState(1L, "myvm.example.com", ZONE_ID);
@@ -1067,7 +1068,7 @@ public class DnsProviderManagerImplTest {
public void testHandleVmRunningStateFoundButNoActiveNics() throws DnsProviderException {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(30L)).thenReturn(instanceMock);
- when(dnsNicJoinDao.listActiveByVmId(30L)).thenReturn(Collections.emptyList());
+ when(nicDnsJoinDao.listActiveByVmId(30L)).thenReturn(Collections.emptyList());
manager.handleVmRunningState(30L);
@@ -1077,10 +1078,10 @@ public class DnsProviderManagerImplTest {
@Test
public void testHandleVmStopAndDestroyNicWithNullDnsUrlIsSkipped() throws DnsProviderException {
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
- when(nicMock.getNicDnsUrl()).thenReturn(null);
- when(dnsNicJoinDao.listIncludingRemovedByVmId(31L))
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
+ when(nicMock.getNicDnsName()).thenReturn(null);
+ when(nicDnsJoinDao.listIncludingRemovedByVmId(31L))
.thenReturn(Collections.singletonList(nicMock));
manager.handleVmStopAndDestroy(31L);
@@ -1090,16 +1091,16 @@ public class DnsProviderManagerImplTest {
@Test
public void testHandleVmStopAndDestroyWithValidDnsUrlTriggersCleanup() throws Exception {
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
- when(nicMock.getNicDnsUrl()).thenReturn("myvm.example.com");
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
+ when(nicMock.getNicDnsName()).thenReturn("myvm.example.com");
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
- when(dnsNicJoinDao.listIncludingRemovedByVmId(32L))
+ when(nicDnsJoinDao.listIncludingRemovedByVmId(32L))
.thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(32L), eq(ZONE_ID), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(32L), eq(ZONE_ID), anyString()))
.thenReturn(Collections.emptyList());
try (MockedStatic txMock =
@@ -1119,7 +1120,7 @@ public class DnsProviderManagerImplTest {
manager.handleVmStopAndDestroy(32L);
- verify(nicDetailsDao).removeDetail(nicMock.getId(), org.apache.cloudstack.api.ApiConstants.NIC_DNS_RECORD);
+ verify(nicDetailsDao).removeDetail(nicMock.getId(), org.apache.cloudstack.api.ApiConstants.NIC_DNS_NAME);
verify(dnsProviderMock, times(2)).deleteRecord(eq(serverVO), eq(zoneVO), any(DnsRecord.class));
}
}
@@ -1132,21 +1133,21 @@ public class DnsProviderManagerImplTest {
manager.handleNicPlug(33L, 500L);
- verify(dnsNicJoinDao, never()).findById(anyLong());
+ verify(nicDnsJoinDao, never()).findById(anyLong());
verify(dnsProviderMock, never()).addRecord(any(), any(), any());
}
@Test
public void testHandleNicUnplugNicHasValidDnsUrlTriggersSyncCleanup() throws Exception {
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
- when(nicMock.getNicDnsUrl()).thenReturn("myvm.example.com");
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
+ when(nicMock.getNicDnsName()).thenReturn("myvm.example.com");
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
- when(dnsNicJoinDao.findByIdIncludingRemoved(600L)).thenReturn(nicMock);
+ when(nicDnsJoinDao.findByIdIncludingRemoved(600L)).thenReturn(nicMock);
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(34L), eq(ZONE_ID), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(34L), eq(ZONE_ID), anyString()))
.thenReturn(Collections.emptyList());
try (MockedStatic txMock =
@@ -1166,7 +1167,7 @@ public class DnsProviderManagerImplTest {
manager.handleNicUnplug(34L, 600L);
- verify(nicDetailsDao).removeDetail(600L, org.apache.cloudstack.api.ApiConstants.NIC_DNS_RECORD);
+ verify(nicDetailsDao).removeDetail(600L, org.apache.cloudstack.api.ApiConstants.NIC_DNS_NAME);
verify(dnsProviderMock, times(2)).deleteRecord(eq(serverVO), eq(zoneVO), any(DnsRecord.class));
}
}
@@ -1175,7 +1176,7 @@ public class DnsProviderManagerImplTest {
public void testHandleVmHostnameChangedVmFoundButNoActiveNicsExitsEarly() throws DnsProviderException {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(35L)).thenReturn(instanceMock);
- when(dnsNicJoinDao.listActiveByVmId(35L)).thenReturn(Collections.emptyList());
+ when(nicDnsJoinDao.listActiveByVmId(35L)).thenReturn(Collections.emptyList());
manager.handleVmHostnameChanged(35L, "newname");
@@ -1185,10 +1186,10 @@ public class DnsProviderManagerImplTest {
@Test
public void testIsDnsCollisionReturnsTrueForDifferentInstance() {
- org.apache.cloudstack.dns.vo.DnsNicJoinVO existing =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO existing =
+ mock(NicDnsJoinVO.class);
when(existing.getInstanceId()).thenReturn(99L);
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(existing);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(existing);
try (MockedStatic aeMock =
Mockito.mockStatic(com.cloud.event.ActionEventUtils.class)) {
@@ -1203,7 +1204,7 @@ public class DnsProviderManagerImplTest {
@Test
public void testIsDnsCollisionReturnsFalseWhenNoExistingRecord() {
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(null);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(null);
boolean result = (boolean) ReflectionTestUtils.invokeMethod(
manager, "isDnsCollision", "vm.example.com", ZONE_ID, 42L);
assertFalse(result);
@@ -1211,10 +1212,10 @@ public class DnsProviderManagerImplTest {
@Test
public void testIsDnsCollisionReturnsFalseWhenSameInstance() {
- org.apache.cloudstack.dns.vo.DnsNicJoinVO existing =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO existing =
+ mock(NicDnsJoinVO.class);
when(existing.getInstanceId()).thenReturn(42L);
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(existing);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone("vm.example.com", ZONE_ID)).thenReturn(existing);
boolean result = (boolean) ReflectionTestUtils.invokeMethod(
manager, "isDnsCollision", "vm.example.com", ZONE_ID, 42L);
assertFalse(result);
@@ -1226,15 +1227,15 @@ public class DnsProviderManagerImplTest {
when(instanceMock.getState()).thenReturn(com.cloud.vm.VirtualMachine.State.Running);
when(vmInstanceDao.findById(40L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
- when(dnsNicJoinDao.findById(700L)).thenReturn(nicMock);
+ when(nicDnsJoinDao.findById(700L)).thenReturn(nicMock);
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(null); // zone missing → exit after NIC lookup
manager.handleNicPlug(40L, 700L);
- verify(dnsNicJoinDao, times(1)).findById(700L);
+ verify(nicDnsJoinDao, times(1)).findById(700L);
verify(dnsProviderMock, never()).addRecord(any(), any(), any());
}
@@ -1244,10 +1245,10 @@ public class DnsProviderManagerImplTest {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(41L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
- when(dnsNicJoinDao.listActiveByVmId(41L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicDnsJoinDao.listActiveByVmId(41L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(null); // zone null → NIC skipped → empty map
manager.handleVmHostnameChanged(41L, "newname");
@@ -1261,10 +1262,10 @@ public class DnsProviderManagerImplTest {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(42L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
- when(dnsNicJoinDao.listActiveByVmId(42L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicDnsJoinDao.listActiveByVmId(42L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(null); // zone null → NIC skipped → empty outer map
manager.handleVmRunningState(42L);
@@ -1301,7 +1302,7 @@ public class DnsProviderManagerImplTest {
public void testHandleVmRunningStateInstanceNullExitsEarly() throws DnsProviderException {
when(vmInstanceDao.findById(50L)).thenReturn(null);
manager.handleVmRunningState(50L);
- verify(dnsNicJoinDao, never()).listActiveByVmId(anyLong());
+ verify(nicDnsJoinDao, never()).listActiveByVmId(anyLong());
}
@Test
@@ -1310,18 +1311,18 @@ public class DnsProviderManagerImplTest {
when(instanceMock.getHostName()).thenReturn("myvm");
when(vmInstanceDao.findById(51L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
when(nicMock.getSubDomain()).thenReturn(null);
- when(dnsNicJoinDao.listActiveByVmId(51L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicDnsJoinDao.listActiveByVmId(51L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
// no collision
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(null);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(null);
// sync: no IPs → delete both
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(51L), eq(ZONE_ID), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(51L), eq(ZONE_ID), anyString()))
.thenReturn(Collections.emptyList());
try (MockedStatic txMock =
@@ -1339,7 +1340,7 @@ public class DnsProviderManagerImplTest {
manager.handleVmRunningState(51L);
verify(nicDetailsDao).addDetail(anyLong(),
- eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_RECORD), anyString(), eq(true));
+ eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_NAME), anyString(), eq(true));
verify(dnsProviderMock, times(2)).deleteRecord(eq(serverVO), eq(zoneVO), any(DnsRecord.class));
}
}
@@ -1350,18 +1351,18 @@ public class DnsProviderManagerImplTest {
when(instanceMock.getHostName()).thenReturn("myvm");
when(vmInstanceDao.findById(52L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
when(nicMock.getSubDomain()).thenReturn(null);
- when(dnsNicJoinDao.listActiveByVmId(52L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicDnsJoinDao.listActiveByVmId(52L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
// collision: different instance owns the record
- org.apache.cloudstack.dns.vo.DnsNicJoinVO colliding =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO colliding =
+ mock(NicDnsJoinVO.class);
when(colliding.getInstanceId()).thenReturn(999L);
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(colliding);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(colliding);
try (MockedStatic txMock =
Mockito.mockStatic(com.cloud.utils.db.Transaction.class);
@@ -1393,7 +1394,7 @@ public class DnsProviderManagerImplTest {
public void testHandleVmHostnameChangedInstanceNullExitsEarly() throws DnsProviderException {
when(vmInstanceDao.findById(60L)).thenReturn(null);
manager.handleVmHostnameChanged(60L, "newname");
- verify(dnsNicJoinDao, never()).listActiveByVmId(anyLong());
+ verify(nicDnsJoinDao, never()).listActiveByVmId(anyLong());
}
@Test
@@ -1401,13 +1402,13 @@ public class DnsProviderManagerImplTest {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(61L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
when(nicMock.getSubDomain()).thenReturn(null);
// old URL already equals the new computed URL → continue (skip)
- when(nicMock.getNicDnsUrl()).thenReturn("newname.example.com");
- when(dnsNicJoinDao.listActiveByVmId(61L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicMock.getNicDnsName()).thenReturn("newname.example.com");
+ when(nicDnsJoinDao.listActiveByVmId(61L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
manager.handleVmHostnameChanged(61L, "newname");
@@ -1422,19 +1423,19 @@ public class DnsProviderManagerImplTest {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(62L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
when(nicMock.getSubDomain()).thenReturn(null);
- when(nicMock.getNicDnsUrl()).thenReturn("oldvm.example.com"); // differs from new FQDN
- when(dnsNicJoinDao.listActiveByVmId(62L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicMock.getNicDnsName()).thenReturn("oldvm.example.com"); // differs from new FQDN
+ when(nicDnsJoinDao.listActiveByVmId(62L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
// no collision for new record
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(null);
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(null);
// sync always returns empty → deleteRecord called
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(62L), eq(ZONE_ID), anyString()))
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(62L), eq(ZONE_ID), anyString()))
.thenReturn(Collections.emptyList());
try (MockedStatic txMock =
@@ -1453,10 +1454,10 @@ public class DnsProviderManagerImplTest {
// Tx1: old URL removed from nic_details
verify(nicDetailsDao).removeDetail(anyLong(),
- eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_RECORD));
+ eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_NAME));
// Tx2: new URL written to nic_details
verify(nicDetailsDao).addDetail(anyLong(),
- eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_RECORD), anyString(), eq(true));
+ eq(org.apache.cloudstack.api.ApiConstants.NIC_DNS_NAME), anyString(), eq(true));
// deleteRecord called for both old-sync (A+AAAA) and new-sync (A+AAAA) = 4 total
verify(dnsProviderMock, times(4)).deleteRecord(eq(serverVO), eq(zoneVO), any(DnsRecord.class));
}
@@ -1467,21 +1468,21 @@ public class DnsProviderManagerImplTest {
com.cloud.vm.VMInstanceVO instanceMock = mock(com.cloud.vm.VMInstanceVO.class);
when(vmInstanceDao.findById(63L)).thenReturn(instanceMock);
- org.apache.cloudstack.dns.vo.DnsNicJoinVO nicMock =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO nicMock =
+ mock(NicDnsJoinVO.class);
when(nicMock.getDnsZoneId()).thenReturn(ZONE_ID);
when(nicMock.getSubDomain()).thenReturn(null);
- when(nicMock.getNicDnsUrl()).thenReturn("oldvm.example.com");
- when(dnsNicJoinDao.listActiveByVmId(63L)).thenReturn(Collections.singletonList(nicMock));
+ when(nicMock.getNicDnsName()).thenReturn("oldvm.example.com");
+ when(nicDnsJoinDao.listActiveByVmId(63L)).thenReturn(Collections.singletonList(nicMock));
when(dnsZoneDao.findById(ZONE_ID)).thenReturn(zoneVO);
when(dnsServerDao.findById(SERVER_ID)).thenReturn(serverVO);
// collision on the new FQDN
- org.apache.cloudstack.dns.vo.DnsNicJoinVO colliding =
- mock(org.apache.cloudstack.dns.vo.DnsNicJoinVO.class);
+ NicDnsJoinVO colliding =
+ mock(NicDnsJoinVO.class);
when(colliding.getInstanceId()).thenReturn(999L);
- when(dnsNicJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(colliding);
- when(dnsNicJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(63L), eq(ZONE_ID), anyString()))
+ when(nicDnsJoinDao.findActiveByDnsRecordAndZone(anyString(), eq(ZONE_ID))).thenReturn(colliding);
+ when(nicDnsJoinDao.listActiveByVmIdZoneAndDnsRecord(eq(63L), eq(ZONE_ID), anyString()))
.thenReturn(Collections.emptyList());
try (MockedStatic txMock =
diff --git a/test/integration/smoke/test_dns_framework_powerdns.py b/test/integration/smoke/test_dns_framework_powerdns.py
index 51efcb360b8..1dfdca35c33 100644
--- a/test/integration/smoke/test_dns_framework_powerdns.py
+++ b/test/integration/smoke/test_dns_framework_powerdns.py
@@ -17,6 +17,7 @@
from marvin.cloudstackTestCase import cloudstackTestCase
from marvin.cloudstackAPI import *
+from nose.plugins.attrib import attr
import subprocess
import time
@@ -85,7 +86,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
cls.pdns_url = f"http://{cls.marvin_vm_ip}"
cls.logger.info(f"PDNS endpoint: {cls.pdns_url}")
-
+ @attr(tags=["advanced"], required_hardware="true")
def test_01_list_dns_providers(self):
"""
List DNS providers, expect PowerDNS provider to be present
@@ -96,6 +97,8 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertIsNotNone(response, "Failed to list DNS providers")
self.logger.info(f"DNS Providers found: {[provider.name for provider in response]}")
+
+ @attr(tags=["advanced"], required_hardware="true")
def test_02_add_dns_server(self):
"""
Register PDNS as DNS provider in CloudStack
@@ -109,6 +112,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertIsNotNone(response.id, "DNS server ID should not be None")
+ @attr(tags=["advanced"], required_hardware="true")
def test_03_list_dns_servers(self):
"""
List DNS servers and verify the newly added PDNS provider is present
@@ -122,6 +126,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertEqual(response[0].id, self.dns_server_id, "DNS server ID mismatch")
+ @attr(tags=["advanced"], required_hardware="true")
def test_04_create_dns_zone(self):
"""
Create a DNS zone in the added PDNS provider
@@ -134,6 +139,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.logger.info(f"DNS Zone created: {response.id}")
+ @attr(tags=["advanced"], required_hardware="true")
def test_05_list_dns_zones(self):
"""
List DNS zones and verify the newly created zone is present
@@ -147,6 +153,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertEqual(response[0].id, self.dns_zone_id, "DNS zone ID mismatch")
self.assertEqual(response[0].name, "example.com", "DNS zone name mismatch")
+ @attr(tags=["advanced"], required_hardware="true")
def test_06_create_a_dns_record(self):
"""
Create a DNS record in the previously created zone
@@ -162,6 +169,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertEqual(response.name, "www.example.com", "DNS record name mismatch")
self._assert_dns("www.example.com", "A", expected="10.1.1.10")
+ @attr(tags=["advanced"], required_hardware="true")
def test_07_create_aaaa_dns_records(self):
"""
Create AAAA DNS records in the previously created zone
@@ -177,7 +185,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self.assertTrue(response.name is not None, "DNS record name should not be None")
self._assert_dns("www.example.com", "AAAA", expected="2001:db8::10")
-
+ @attr(tags=["advanced"], required_hardware="true")
def test_08_create_mx_dns_record(self):
"""
Create an MX DNS record in the previously created zone
@@ -194,6 +202,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
self._assert_dns("example.com", "MX", contains=["10", "mail.example.com"])
+ @attr(tags=["advanced"], required_hardware="true")
def test_09_list_dns_records(self):
"""
List DNS records in the zone and verify the created records are present
@@ -207,7 +216,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
record_types = set(record.type for record in response)
self.assertSetEqual(record_types, {"NS", "A", "AAAA", "MX"}, "DNS record types mismatch")
-
+ @attr(tags=["advanced"], required_hardware="true")
def test_10_delete_dns_record(self):
"""
Delete one of the DNS records and verify it's removed
@@ -229,6 +238,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
remaining_record_names = set(record.name for record in response_after_deletion)
self.assertNotIn(delete_record_cmd.name, remaining_record_names, "Deleted DNS record still present")
+ @attr(tags=["advanced"], required_hardware="true")
def test_11_delete_dns_zone(self):
"""
Delete the DNS zone and verify it's removed
@@ -249,6 +259,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
except Exception as e:
self.logger.info(f"Expected exception after delete: {str(e)}")
+ @attr(tags=["advanced"], required_hardware="true")
def test_12_delete_dns_server(self):
"""
Delete the PDNS DNS server and verify it's removed
@@ -324,7 +335,7 @@ class TestCloudStackDNSFramework(cloudstackTestCase):
def _dig(self, name, rtype):
dns_ip = self.__class__.marvin_vm_ip
- dns_port = 5353
+ dns_port = 53
cmd = [
"dig",
diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 100d8c196d1..fec7f5f9625 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -959,13 +959,13 @@
"label.dns.delete.zone": "Delete DNS Zone",
"label.dns.dnsapikey": "DNS API key",
"label.dns.externalserverid": "DNS server ID",
+"label.dns.name": "DNS Name",
"label.dns.publicdomainsuffix": "Public domain suffix",
"label.dns.records": "DNS Records",
"label.dns.record.name.tooltip": "The hostname or subdomain for this record (e.g. www)",
"label.dns.record.type.tooltip": "The DNS record type",
"label.dns.record.contents.tooltip": "The content values for this DNS record (type and press Enter to add)",
"label.dns.record.ttl.tooltip": "Time to live in seconds",
-"label.dns.record.url": "Instance URL",
"label.dns.server": "DNS Server",
"label.dnsserverid": "DNS Server ID",
"label.dnsservername": "DNS Server name",
diff --git a/ui/src/views/network/NicsTable.vue b/ui/src/views/network/NicsTable.vue
index 68655d2111d..f6d3ae72356 100644
--- a/ui/src/views/network/NicsTable.vue
+++ b/ui/src/views/network/NicsTable.vue
@@ -58,8 +58,8 @@
{{ record.isolationuri }}
-
- {{ record.dnsrecordurl }}
+
+ {{ record.nicdnsname }}