feat: add dcrouter external gateway sync
This commit is contained in:
+32
-2
@@ -34,6 +34,24 @@ export class OneboxServicesManager {
|
||||
);
|
||||
}
|
||||
|
||||
private async syncExternalGatewayRoute(service: IService): Promise<void> {
|
||||
if (!this.oneboxRef.externalGateway) return;
|
||||
try {
|
||||
await this.oneboxRef.externalGateway.syncServiceRoute(service);
|
||||
} catch (error) {
|
||||
logger.warn(`Failed to sync external gateway route for ${service.domain}: ${getErrorMessage(error)}`);
|
||||
}
|
||||
}
|
||||
|
||||
private async deleteExternalGatewayRoute(service: Pick<IService, 'id' | 'name' | 'domain'>): Promise<void> {
|
||||
if (!this.oneboxRef.externalGateway) return;
|
||||
try {
|
||||
await this.oneboxRef.externalGateway.deleteServiceRoute(service);
|
||||
} catch (error) {
|
||||
logger.warn(`Failed to delete external gateway route for ${service.domain}: ${getErrorMessage(error)}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deploy a new service (full workflow)
|
||||
*/
|
||||
@@ -210,6 +228,8 @@ export class OneboxServicesManager {
|
||||
|
||||
// Note: SSL certificates are now handled automatically by CertRequirementManager
|
||||
// which processes pending requirements created above. No direct obtainCertificate call needed.
|
||||
|
||||
await this.syncExternalGatewayRoute(this.database.getServiceByName(options.name)!);
|
||||
}
|
||||
|
||||
logger.success(`Service deployed successfully: ${options.name}`);
|
||||
@@ -252,6 +272,8 @@ export class OneboxServicesManager {
|
||||
} catch (routeError) {
|
||||
logger.warn(`Failed to add proxy route for ${service.domain}: ${getErrorMessage(routeError)}`);
|
||||
}
|
||||
|
||||
await this.syncExternalGatewayRoute(this.database.getServiceByName(name)!);
|
||||
}
|
||||
|
||||
logger.success(`Service started: ${name}`);
|
||||
@@ -291,7 +313,8 @@ export class OneboxServicesManager {
|
||||
|
||||
// Remove reverse proxy route if service has a domain
|
||||
if (service.domain) {
|
||||
this.oneboxRef.reverseProxy.removeRoute(service.domain);
|
||||
await this.oneboxRef.reverseProxy.removeRoute(service.domain);
|
||||
await this.deleteExternalGatewayRoute(service);
|
||||
}
|
||||
|
||||
logger.success(`Service stopped: ${name}`);
|
||||
@@ -359,6 +382,8 @@ export class OneboxServicesManager {
|
||||
logger.warn(`Failed to remove reverse proxy route: ${getErrorMessage(error)}`);
|
||||
}
|
||||
|
||||
await this.deleteExternalGatewayRoute(service);
|
||||
|
||||
// Note: We don't remove DNS records or SSL certs automatically
|
||||
// as they might be used by other services or need manual cleanup
|
||||
}
|
||||
@@ -617,10 +642,12 @@ export class OneboxServicesManager {
|
||||
// Remove old route if it existed
|
||||
if (oldDomain) {
|
||||
try {
|
||||
this.oneboxRef.reverseProxy.removeRoute(oldDomain);
|
||||
await this.oneboxRef.reverseProxy.removeRoute(oldDomain);
|
||||
} catch (error) {
|
||||
logger.warn(`Failed to remove old reverse proxy route: ${getErrorMessage(error)}`);
|
||||
}
|
||||
|
||||
await this.deleteExternalGatewayRoute({ ...service, domain: oldDomain });
|
||||
}
|
||||
|
||||
// Add new route if domain specified
|
||||
@@ -650,6 +677,9 @@ export class OneboxServicesManager {
|
||||
}
|
||||
|
||||
const refreshedService = this.database.getServiceByName(name)!;
|
||||
if (refreshedService.domain && refreshedService.status === 'running') {
|
||||
await this.syncExternalGatewayRoute(refreshedService);
|
||||
}
|
||||
await this.broadcastServiceUpdate(name, 'updated');
|
||||
return refreshedService;
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user