diff --git a/nodejs/models/dns_provider.js b/nodejs/models/dns_provider.js index e5d09dd..f6e5640 100644 --- a/nodejs/models/dns_provider.js +++ b/nodejs/models/dns_provider.js @@ -149,6 +149,28 @@ class DnsProvider extends Table{ return out; } + // Re-sync every configured provider's domain list from its API. Mirrors the + // manual /dns/domain/refresh/:item route (get -> updateDomains) across all + // providers; used by the host scheduler. Never throws — one bad provider + // (e.g. a revoked key) must not abort the rest. + static async refreshAllDomains(){ + let ids; + try{ + ids = await this.list(); + }catch(error){ + console.error('refreshAllDomains: could not list providers', error.message); + return; + } + for(let id of ids){ + try{ + let provider = await this.get(id); + await provider.updateDomains(); + }catch(error){ + console.error('refreshAllDomains: provider', id, error.message); + } + } + } + get api(){ return new this.constructor.Provider(this); } diff --git a/nodejs/services/host_scheduler.js b/nodejs/services/host_scheduler.js index 465f658..399babf 100644 --- a/nodejs/services/host_scheduler.js +++ b/nodejs/services/host_scheduler.js @@ -2,6 +2,7 @@ const conf = require('@simpleworkjs/conf'); const {Host} = require('../models/host'); +const {DnsProvider} = require('../models').models; function hostSchedulerService(){ @@ -29,8 +30,14 @@ function hostSchedulerService(){ // Ensures certificates are renewed well before expiration setInterval(Host.checkWildcardForRenew.bind(Host), conf.service.hostScheduler.interval); + // Refresh each DNS provider's domain list on the same cadence so domains + // added/removed at the provider are picked up without a manual refresh. + setTimeout(DnsProvider.refreshAllDomains.bind(DnsProvider), conf.service.hostScheduler.initial); + setInterval(DnsProvider.refreshAllDomains.bind(DnsProvider), conf.service.hostScheduler.interval); + console.log('Host scheduler service initialized'); console.log('- Wildcard cert check: 30s after start, then every 24h'); + console.log('- DNS provider domain refresh: 30s after start, then every 24h'); } if(conf.service.hostScheduler.enabled !== false) hostSchedulerService();