feat(dns): Enhance DNS management with auto-generated entries and service activation
This commit is contained in:
@@ -156,6 +156,95 @@ export class DnsManager {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a DNS entry for a service
|
||||
* @param dnsEntryData The DNS entry data
|
||||
*/
|
||||
public async createServiceDnsEntry(dnsEntryData: plugins.servezoneInterfaces.data.IDnsEntry['data']) {
|
||||
// If domainId is provided, get the domain and set the zone
|
||||
if (dnsEntryData.domainId) {
|
||||
const domain = await this.cloudlyRef.domainManager.CDomain.getInstance({
|
||||
id: dnsEntryData.domainId,
|
||||
});
|
||||
if (domain) {
|
||||
dnsEntryData.zone = domain.data.name;
|
||||
}
|
||||
}
|
||||
|
||||
// Create the DNS entry
|
||||
const dnsEntry = await this.CDnsEntry.createDnsEntry(dnsEntryData);
|
||||
return dnsEntry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate DNS entries for a service when it's deployed
|
||||
* @param serviceId The service ID
|
||||
*/
|
||||
public async activateServiceDnsEntries(serviceId: string) {
|
||||
const dnsEntries = await this.CDnsEntry.getInstances({
|
||||
'data.sourceServiceId': serviceId,
|
||||
'data.sourceType': 'service',
|
||||
});
|
||||
|
||||
for (const entry of dnsEntries) {
|
||||
entry.data.active = true;
|
||||
entry.data.updatedAt = Date.now();
|
||||
await entry.save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deactivate DNS entries for a service when it's undeployed
|
||||
* @param serviceId The service ID
|
||||
*/
|
||||
public async deactivateServiceDnsEntries(serviceId: string) {
|
||||
const dnsEntries = await this.CDnsEntry.getInstances({
|
||||
'data.sourceServiceId': serviceId,
|
||||
'data.sourceType': 'service',
|
||||
});
|
||||
|
||||
for (const entry of dnsEntries) {
|
||||
entry.data.active = false;
|
||||
entry.data.updatedAt = Date.now();
|
||||
await entry.save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all DNS entries for a service
|
||||
* @param serviceId The service ID
|
||||
*/
|
||||
public async removeServiceDnsEntries(serviceId: string) {
|
||||
const dnsEntries = await this.CDnsEntry.getInstances({
|
||||
'data.sourceServiceId': serviceId,
|
||||
'data.sourceType': 'service',
|
||||
});
|
||||
|
||||
for (const entry of dnsEntries) {
|
||||
await entry.delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update DNS entry values when deployment happens
|
||||
* @param serviceId The service ID
|
||||
* @param ipAddress The IP address to set for the DNS entries
|
||||
*/
|
||||
public async updateServiceDnsEntriesIp(serviceId: string, ipAddress: string) {
|
||||
const dnsEntries = await this.CDnsEntry.getInstances({
|
||||
'data.sourceServiceId': serviceId,
|
||||
'data.sourceType': 'service',
|
||||
});
|
||||
|
||||
for (const entry of dnsEntries) {
|
||||
if (entry.data.type === 'A' || entry.data.type === 'AAAA') {
|
||||
entry.data.value = ipAddress;
|
||||
entry.data.updatedAt = Date.now();
|
||||
await entry.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the DNS manager
|
||||
*/
|
||||
|
Reference in New Issue
Block a user