Skip to content

Commit 6ca9d5a

Browse files
committed
add views for dns_server and dns_zone
1 parent 1fe79bd commit 6ca9d5a

File tree

13 files changed

+618
-43
lines changed

13 files changed

+618
-43
lines changed

api/src/main/java/org/apache/cloudstack/api/response/DnsServerResponse.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.cloudstack.api.ApiConstants;
2323
import org.apache.cloudstack.api.BaseResponse;
2424
import org.apache.cloudstack.api.EntityReference;
25-
import org.apache.cloudstack.dns.DnsProviderType;
2625
import org.apache.cloudstack.dns.DnsServer;
2726

2827
import com.cloud.serializer.Param;
@@ -49,7 +48,7 @@ public class DnsServerResponse extends BaseResponse {
4948

5049
@SerializedName(ApiConstants.PROVIDER)
5150
@Param(description = "The provider type of the DNS server")
52-
private DnsProviderType provider;
51+
private String provider;
5352

5453
@SerializedName(ApiConstants.IS_PUBLIC)
5554
@Param(description = "Is the DNS server publicly available")
@@ -63,6 +62,18 @@ public class DnsServerResponse extends BaseResponse {
6362
@Param(description = "Name servers entries associated to DNS server")
6463
private List<String> nameServers;
6564

65+
@SerializedName(ApiConstants.ACCOUNT)
66+
@Param(description = "the account associated with the DNS server")
67+
private String accountName;
68+
69+
@SerializedName(ApiConstants.DOMAIN_ID)
70+
@Param(description = "the ID of the domain associated with the DNS server")
71+
private String domainId;
72+
73+
@SerializedName(ApiConstants.DOMAIN)
74+
@Param(description = "the name of the domain associated with the DNS server")
75+
private String domainName;
76+
6677
public DnsServerResponse() {
6778
super();
6879

@@ -80,7 +91,7 @@ public void setUrl(String url) {
8091
this.url = url;
8192
}
8293

83-
public void setProvider(DnsProviderType provider) {
94+
public void setProvider(String provider) {
8495
this.provider = provider;
8596
}
8697

@@ -99,4 +110,16 @@ public void setPublicDomainSuffix(String publicDomainSuffix) {
99110
public void setNameServers(List<String> nameServers) {
100111
this.nameServers = nameServers;
101112
}
113+
114+
public void setAccountName(String accountName) {
115+
this.accountName = accountName;
116+
}
117+
118+
public void setDomainId(String domainId) {
119+
this.domainId = domainId;
120+
}
121+
122+
public void setDomainName(String domainName) {
123+
this.domainName = domainName;
124+
}
102125
}

api/src/main/java/org/apache/cloudstack/api/response/DnsZoneResponse.java

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,27 @@ public class DnsZoneResponse extends BaseResponse {
3737

3838
@SerializedName("dnsserverid")
3939
@Param(description = "ID of the DNS server this zone belongs to")
40-
private Long dnsServerId;
40+
private String dnsServerId;
41+
42+
@SerializedName("dnsservername")
43+
@Param(description = "the name of the DNS server hosting this zone")
44+
private String dnsServerName;
45+
46+
@SerializedName("dnsserveraccount")
47+
@Param(description = "the account name of the DNS server owner")
48+
private String dnsServerAccountName;
49+
50+
@SerializedName(ApiConstants.ACCOUNT)
51+
@Param(description = "the account associated with the DNS zone")
52+
private String accountName;
53+
54+
@SerializedName(ApiConstants.DOMAIN)
55+
@Param(description = "the name of the domain associated with the DNS zone")
56+
private String domainName;
57+
58+
@SerializedName(ApiConstants.DOMAIN_ID)
59+
@Param(description = "the ID of the domain associated with the DNS server")
60+
private String domainId;
4161

4262
@SerializedName(ApiConstants.NETWORK_ID)
4363
@Param(description = "ID of the network this zone is associated with")
@@ -68,7 +88,7 @@ public void setName(String name) {
6888
this.name = name;
6989
}
7090

71-
public void setDnsServerId(Long dnsServerId) {
91+
public void setDnsServerId(String dnsServerId) {
7292
this.dnsServerId = dnsServerId;
7393
}
7494

@@ -95,4 +115,25 @@ public void setId(String id) {
95115
public void setDescription(String description) {
96116
this.description = description;
97117
}
118+
119+
public void setDnsServerName(String dnsServerName) {
120+
this.dnsServerName = dnsServerName;
121+
}
122+
123+
public void setDnsServerAccountName(String dnsServerAccountName) {
124+
this.dnsServerAccountName = dnsServerAccountName;
125+
}
126+
127+
public void setAccountName(String accountName) {
128+
this.accountName = accountName;
129+
}
130+
131+
public void setDomainName(String domainName) {
132+
this.domainName = domainName;
133+
}
134+
135+
public void setDomainId(String domainId) {
136+
this.domainId = domainId;
137+
}
138+
98139
}

engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,4 +310,10 @@
310310
<bean id="gpuDeviceDaoImpl" class="com.cloud.gpu.dao.GpuDeviceDaoImpl" />
311311
<bean id="vgpuProfileDaoImpl" class="com.cloud.gpu.dao.VgpuProfileDaoImpl" />
312312
<bean id="importVMTaskDaoImpl" class="com.cloud.vm.dao.ImportVMTaskDaoImpl" />
313+
<bean id="dnsServerDao" class="org.apache.cloudstack.dns.dao.DnsServerDaoImpl" />
314+
<bean id="dnsZoneDao" class="org.apache.cloudstack.dns.dao.DnsZoneDaoImpl" />
315+
<bean id="dnsZoneNetworkMapDao" class="org.apache.cloudstack.dns.dao.DnsZoneNetworkMapDaoImpl" />
316+
<bean id="dnsServerJoinDao" class="org.apache.cloudstack.dns.dao.DnsServerJoinDaoImpl" />
317+
<bean id="dnsZoneJoinDao" class="org.apache.cloudstack.dns.dao.DnsZoneJoinDaoImpl" />
318+
313319
</beans>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
-- Licensed to the Apache Software Foundation (ASF) under one
2+
-- or more contributor license agreements. See the NOTICE file
3+
-- distributed with this work for additional information
4+
-- regarding copyright ownership. The ASF licenses this file
5+
-- to you under the Apache License, Version 2.0 (the
6+
-- "License"); you may not use this file except in compliance
7+
-- with the License. You may obtain a copy of the License at
8+
--
9+
-- http://www.apache.org/licenses/LICENSE-2.0
10+
--
11+
-- Unless required by applicable law or agreed to in writing,
12+
-- software distributed under the License is distributed on an
13+
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
-- KIND, either express or implied. See the License for the
15+
-- specific language governing permissions and limitations
16+
-- under the License.
17+
18+
-- VIEW `cloud`.`dns_server_view`;
19+
20+
DROP VIEW IF EXISTS `cloud`.`dns_server_view`;
21+
CREATE VIEW `cloud`.`dns_server_view` AS
22+
SELECT
23+
dns.id,
24+
dns.uuid,
25+
dns.name,
26+
dns.provider_type,
27+
dns.url,
28+
dns.port,
29+
dns.name_servers,
30+
dns.is_public,
31+
dns.public_domain_suffix,
32+
dns.state,
33+
dns.created,
34+
dns.removed,
35+
account.account_name account_name,
36+
domain.name domain_name,
37+
domain.uuid domain_uuid,
38+
domain.path domain_path
39+
FROM
40+
`cloud`.`dns_server` dns
41+
INNER JOIN
42+
`cloud`.`account` account ON dns.account_id = account.id
43+
INNER JOIN
44+
`cloud`.`domain` domain ON dns.domain_id = domain.id;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
-- Licensed to the Apache Software Foundation (ASF) under one
2+
-- or more contributor license agreements. See the NOTICE file
3+
-- distributed with this work for additional information
4+
-- regarding copyright ownership. The ASF licenses this file
5+
-- to you under the Apache License, Version 2.0 (the
6+
-- "License"); you may not use this file except in compliance
7+
-- with the License. You may obtain a copy of the License at
8+
--
9+
-- http://www.apache.org/licenses/LICENSE-2.0
10+
--
11+
-- Unless required by applicable law or agreed to in writing,
12+
-- software distributed under the License is distributed on an
13+
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
-- KIND, either express or implied. See the License for the
15+
-- specific language governing permissions and limitations
16+
-- under the License.
17+
18+
-- VIEW `cloud`.`dns_zone_view`;
19+
20+
DROP VIEW IF EXISTS `cloud`.`dns_zone_view`;
21+
CREATE VIEW `cloud`.`dns_zone_view` AS
22+
SELECT
23+
zone.id,
24+
zone.uuid,
25+
zone.name,
26+
zone.dns_server_id,
27+
zone.state,
28+
zone.description,
29+
server.uuid dns_server_uuid,
30+
server.name dns_server_name,
31+
server_account.account_name dns_server_account_name,
32+
account.account_name account_name,
33+
domain.name domain_name,
34+
domain.uuid domain_uuid,
35+
domain.path domain_path
36+
FROM
37+
`cloud`.`dns_zone` zone
38+
INNER JOIN
39+
`cloud`.`dns_server` server ON zone.dns_server_id = server.id
40+
INNER JOIN
41+
`cloud`.`account` server_account ON server.account_id = server_account.id
42+
INNER JOIN
43+
`cloud`.`account` account ON zone.account_id = account.id
44+
INNER JOIN
45+
`cloud`.`domain` domain ON zone.domain_id = domain.id;

server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java

Lines changed: 68 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,14 @@
4747
import org.apache.cloudstack.api.response.ListResponse;
4848
import org.apache.cloudstack.context.CallContext;
4949
import org.apache.cloudstack.dns.dao.DnsServerDao;
50+
import org.apache.cloudstack.dns.dao.DnsServerJoinDao;
5051
import org.apache.cloudstack.dns.dao.DnsZoneDao;
52+
import org.apache.cloudstack.dns.dao.DnsZoneJoinDao;
5153
import org.apache.cloudstack.dns.dao.DnsZoneNetworkMapDao;
54+
import org.apache.cloudstack.dns.exception.DnsNotFoundException;
55+
import org.apache.cloudstack.dns.vo.DnsServerJoinVO;
5256
import org.apache.cloudstack.dns.vo.DnsServerVO;
57+
import org.apache.cloudstack.dns.vo.DnsZoneJoinVO;
5358
import org.apache.cloudstack.dns.vo.DnsZoneNetworkMapVO;
5459
import org.apache.cloudstack.dns.vo.DnsZoneVO;
5560
import org.springframework.stereotype.Component;
@@ -95,6 +100,10 @@ public class DnsProviderManagerImpl extends ManagerBase implements DnsProviderMa
95100
NicDao nicDao;
96101
@Inject
97102
DomainDao domainDao;
103+
@Inject
104+
DnsZoneJoinDao dnsZoneJoinDao;
105+
@Inject
106+
DnsServerJoinDao dnsServerJoinDao;
98107

99108
private DnsProvider getProviderByType(DnsProviderType type) {
100109
if (type == null) {
@@ -149,9 +158,14 @@ public DnsServer addDnsServer(AddDnsServerCmd cmd) {
149158
@Override
150159
public ListResponse<DnsServerResponse> listDnsServers(ListDnsServersCmd cmd) {
151160
Pair<List<DnsServerVO>, Integer> result = searchForDnsServerInternal(cmd);
161+
List<String> serverIds = new ArrayList<>();
162+
for (DnsServer server : result.first()) {
163+
serverIds.add(server.getUuid());
164+
}
165+
List<DnsServerJoinVO> joinResult = dnsServerJoinDao.listByUuids(serverIds);
152166
ListResponse<DnsServerResponse> response = new ListResponse<>();
153167
List<DnsServerResponse> serverResponses = new ArrayList<>();
154-
for (DnsServerVO server : result.first()) {
168+
for (DnsServerJoinVO server : joinResult) {
155169
serverResponses.add(createDnsServerResponse(server));
156170
}
157171
response.setResponses(serverResponses, result.second());
@@ -186,9 +200,7 @@ private Pair<List<DnsServerVO>, Integer> searchForDnsServerInternal(ListDnsServe
186200
SearchCriteria<DnsServerVO> sc = sb.create();
187201
accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccountIds, listProjectResourcesCriteria);
188202
sc.setParameters(ApiConstants.STATE, DnsServer.State.Enabled);
189-
if (cmd.getProviderType() != null) {
190-
sc.setParameters(ApiConstants.PROVIDER_TYPE, cmd.getProviderType());
191-
}
203+
sc.setParameters(ApiConstants.PROVIDER_TYPE, cmd.getProviderType());
192204

193205
Pair<List<DnsServerVO>, Integer> ownServersPair = dnsServerDao.searchAndCount(sc, searchFilter);
194206
List<DnsServerVO> dnsServers = new ArrayList<>(ownServersPair.first());
@@ -206,9 +218,7 @@ private Pair<List<DnsServerVO>, Integer> searchForDnsServerInternal(ListDnsServe
206218
publicSc.setParameters(ApiConstants.IS_PUBLIC, 1);
207219
publicSc.setParameters(ApiConstants.DOMAIN_IDS, parentDomainIds.toArray());
208220
publicSc.setParameters(ApiConstants.STATE, DnsServer.State.Enabled);
209-
if (cmd.getProviderType() != null) {
210-
publicSc.setParameters(ApiConstants.PROVIDER_TYPE, cmd.getProviderType());
211-
}
221+
publicSc.setParameters(ApiConstants.PROVIDER_TYPE, cmd.getProviderType());
212222
List<DnsServerVO> publicServers = dnsServerDao.search(publicSc, null);
213223
List<Long> ownServerIds = dnsServers.stream().map(DnsServerVO::getId).collect(Collectors.toList());
214224
for (DnsServerVO publicServer : publicServers) {
@@ -305,21 +315,6 @@ public boolean deleteDnsServer(DeleteDnsServerCmd cmd) {
305315
return dnsServerDao.remove(dnsServerId);
306316
}
307317

308-
@Override
309-
public DnsServerResponse createDnsServerResponse(DnsServer server) {
310-
DnsServerResponse response = new DnsServerResponse();
311-
response.setId(server.getUuid());
312-
response.setName(server.getName());
313-
response.setUrl(server.getUrl());
314-
response.setPort(server.getPort());
315-
response.setProvider(server.getProviderType());
316-
response.setPublic(server.isPublicServer());
317-
response.setNameServers(server.getNameServers());
318-
response.setPublicDomainSuffix(server.getPublicDomainSuffix());
319-
response.setObjectName("dnsserver");
320-
return response;
321-
}
322-
323318
@Override
324319
public boolean deleteDnsZone(Long zoneId) {
325320
DnsZoneVO zone = dnsZoneDao.findById(zoneId);
@@ -376,10 +371,14 @@ public DnsZone updateDnsZone(UpdateDnsZoneCmd cmd) {
376371
@Override
377372
public ListResponse<DnsZoneResponse> listDnsZones(ListDnsZonesCmd cmd) {
378373
Pair<List<DnsZoneVO>, Integer> result = searchForDnsZonesInternal(cmd);
379-
380-
List<DnsZoneResponse> zoneResponses = new ArrayList<>();
374+
List<String> zoneIds = new ArrayList<>();
381375
for (DnsZoneVO zone : result.first()) {
382-
zoneResponses.add(createDnsZoneResponse(zone));
376+
zoneIds.add(zone.getUuid());
377+
}
378+
List<DnsZoneJoinVO> zoneJoinVos = dnsZoneJoinDao.listByUuids(zoneIds);
379+
List<DnsZoneResponse> zoneResponses = new ArrayList<>();
380+
for (DnsZoneJoinVO zoneJoin: zoneJoinVos) {
381+
zoneResponses.add(createDnsZoneResponse(zoneJoin));
383382
}
384383
ListResponse<DnsZoneResponse> response = new ListResponse<>();
385384
response.setResponses(zoneResponses, result.second());
@@ -484,6 +483,9 @@ public ListResponse<DnsRecordResponse> listDnsRecords(ListDnsRecordsCmd cmd) {
484483
ListResponse<DnsRecordResponse> listResponse = new ListResponse<>();
485484
listResponse.setResponses(responses, responses.size());
486485
return listResponse;
486+
} catch (DnsNotFoundException ex) {
487+
logger.error("DNS zone is not found", ex);
488+
throw new CloudRuntimeException("DNS zone is not found, please register it first");
487489
} catch (Exception ex) {
488490
logger.error("Failed to list DNS records from provider", ex);
489491
throw new CloudRuntimeException("Failed to fetch DNS records");
@@ -551,16 +553,48 @@ public DnsZone provisionDnsZone(long dnsZoneId) {
551553
return dnsZone;
552554
}
553555

556+
557+
public DnsServerResponse createDnsServerResponse(DnsServer dnsServer) {
558+
DnsServerJoinVO serverJoin = dnsServerJoinDao.findById(dnsServer.getId());
559+
return createDnsServerResponse(serverJoin);
560+
}
561+
562+
DnsServerResponse createDnsServerResponse(DnsServerJoinVO server) {
563+
DnsServerResponse response = new DnsServerResponse();
564+
response.setId(server.getUuid());
565+
response.setName(server.getName());
566+
response.setUrl(server.getUrl());
567+
response.setPort(server.getPort());
568+
response.setProvider(server.getProviderType());
569+
response.setPublic(server.isPublicServer());
570+
response.setNameServers(server.getNameServers());
571+
response.setPublicDomainSuffix(server.getPublicDomainSuffix());
572+
response.setAccountName(server.getAccountName());
573+
response.setDomainId(server.getDomainUuid()); // Note: APIs always return UUIDs, not internal DB IDs!
574+
response.setDomainName(server.getDomainName());
575+
response.setObjectName("dnsserver");
576+
return response;
577+
}
578+
554579
@Override
555-
public DnsZoneResponse createDnsZoneResponse(DnsZone zone) {
556-
DnsZoneResponse res = new DnsZoneResponse();
557-
res.setName(zone.getName());
558-
res.setDnsServerId(zone.getDnsServerId());
559-
res.setType(zone.getType());
560-
res.setState(zone.getState());
561-
res.setId(zone.getUuid());
562-
res.setDescription(zone.getDescription());
563-
return res;
580+
public DnsZoneResponse createDnsZoneResponse(DnsZone dnsZone) {
581+
DnsZoneJoinVO zoneJoinVO = dnsZoneJoinDao.findById(dnsZone.getId());
582+
return createDnsZoneResponse(zoneJoinVO);
583+
}
584+
585+
DnsZoneResponse createDnsZoneResponse(DnsZoneJoinVO zone) {
586+
DnsZoneResponse response = new DnsZoneResponse();
587+
response.setId(zone.getUuid());
588+
response.setName(zone.getName());
589+
response.setDnsServerId(zone.getDnsServerUuid());
590+
response.setAccountName(zone.getAccountName());
591+
response.setDomainId(zone.getDomainUuid());
592+
response.setDomainName(zone.getDomainName());
593+
response.setDnsServerName(zone.getDnsServerName());
594+
response.setDnsServerAccountName(zone.getDnsServerAccountName());
595+
response.setState(zone.getState());
596+
response.setDescription(zone.getDescription());
597+
return response;
564598
}
565599

566600
@Override

0 commit comments

Comments
 (0)