feat(dns): Enhance DNS management with auto-generated entries and service activation
This commit is contained in:
@@ -25,6 +25,12 @@ export class Service extends plugins.smartdata.SmartDataDbDoc<
|
||||
service.id = await Service.getNewId();
|
||||
Object.assign(service, serviceDataArg);
|
||||
await service.save();
|
||||
|
||||
// Create DNS entries if service has web port and domains configured
|
||||
if (service.data.ports?.web && service.data.domains?.length > 0) {
|
||||
await service.createDnsEntries();
|
||||
}
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
@@ -54,4 +60,40 @@ export class Service extends plugins.smartdata.SmartDataDbDoc<
|
||||
}
|
||||
return finalFlatObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates DNS entries for this service (in inactive state)
|
||||
* These will be activated when the service is deployed
|
||||
*/
|
||||
public async createDnsEntries() {
|
||||
const dnsManager = this.manager.cloudlyRef.dnsManager;
|
||||
|
||||
for (const domain of this.data.domains) {
|
||||
const dnsEntryData: plugins.servezoneInterfaces.data.IDnsEntry['data'] = {
|
||||
type: 'A', // Default to A record, could be made configurable
|
||||
name: domain.name,
|
||||
value: '0.0.0.0', // Placeholder, will be updated on deployment
|
||||
ttl: 3600,
|
||||
zone: '', // Will be set based on domainId
|
||||
domainId: domain.domainId,
|
||||
active: false, // Created as inactive
|
||||
description: `Auto-generated DNS entry for service ${this.data.name}`,
|
||||
createdAt: Date.now(),
|
||||
isAutoGenerated: true,
|
||||
sourceServiceId: this.id,
|
||||
sourceType: 'service',
|
||||
};
|
||||
|
||||
// Create the DNS entry
|
||||
await dnsManager.createServiceDnsEntry(dnsEntryData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes DNS entries for this service
|
||||
*/
|
||||
public async removeDnsEntries() {
|
||||
const dnsManager = this.manager.cloudlyRef.dnsManager;
|
||||
await dnsManager.removeServiceDnsEntries(this.id);
|
||||
}
|
||||
}
|
||||
|
@@ -91,6 +91,10 @@ export class ServiceManager {
|
||||
const service = await Service.getInstance({
|
||||
id: dataArg.serviceId,
|
||||
});
|
||||
|
||||
// Remove DNS entries before deleting the service
|
||||
await service.removeDnsEntries();
|
||||
|
||||
await service.delete();
|
||||
return {
|
||||
success: true,
|
||||
|
Reference in New Issue
Block a user