add secondary domains

note that for updates to work, we keep the secondary domain optional,
even though they are really not.

part of #809
This commit is contained in:
Girish Ramakrishnan
2022-01-14 22:40:51 -08:00
parent d18977ccad
commit b34f66b115
9 changed files with 165 additions and 40 deletions
+18 -7
View File
@@ -255,7 +255,8 @@ async function waitForDnsPropagation(app) {
}
// now wait for redirectDomains and aliasDomains, if any
for (const domain of app.redirectDomains.concat(app.aliasDomains)) {
const allDomains = app.secondaryDomains.concat(app.redirectDomains).concat(app.aliasDomains);
for (const domain of allDomains) {
[error] = await safe(dns.waitForDnsRecord(domain.subdomain, domain.domain, 'A', ipv4, { times: 240 }));
if (error) throw new BoxError(BoxError.DNS_ERROR, `DNS A Record is not synced yet: ${error.message}`, { ipv4, subdomain: domain.subdomain, domain: domain.domain });
if (ipv6Enabled) {
@@ -346,7 +347,7 @@ async function install(app, args, progressCallback) {
if (!skipDnsSetup) {
await progressCallback({ percent: 30, message: 'Registering subdomains' });
await dns.registerLocations([ { subdomain: app.location, domain: app.domain }].concat(app.redirectDomains).concat(app.aliasDomains), { overwriteDns }, progressCallback);
await dns.registerLocations([ { subdomain: app.location, domain: app.domain }].concat(app.secondaryDomains).concat(app.redirectDomains).concat(app.aliasDomains), { overwriteDns }, progressCallback);
}
await progressCallback({ percent: 40, message: 'Downloading image' });
@@ -462,9 +463,19 @@ async function changeLocation(app, args, progressCallback) {
await deleteContainers(app, { managedOnly: true });
// unregister old domains
let obsoleteDomains = oldConfig.redirectDomains.filter(function (o) {
return !app.redirectDomains.some(function (n) { return n.subdomain === o.subdomain && n.domain === o.domain; });
});
let obsoleteDomains = [];
if (oldConfig.secondaryDomains) {
obsoleteDomains = obsoleteDomains.concat(oldConfig.secondaryDomains.filter(function (o) {
return !app.secondaryDomains.some(function (n) { return n.subdomain === o.subdomain && n.domain === o.domain; });
}));
}
if (oldConfig.redirectDomains) {
obsoleteDomains = obsoleteDomains.concat(oldConfig.redirectDomains.filter(function (o) {
return !app.redirectDomains.some(function (n) { return n.subdomain === o.subdomain && n.domain === o.domain; });
}));
}
if (oldConfig.aliasDomains) {
obsoleteDomains = obsoleteDomains.concat(oldConfig.aliasDomains.filter(function (o) {
@@ -479,7 +490,7 @@ async function changeLocation(app, args, progressCallback) {
// setup dns
if (!skipDnsSetup) {
await progressCallback({ percent: 30, message: 'Registering subdomains' });
await dns.registerLocations([ { subdomain: app.location, domain: app.domain }].concat(app.redirectDomains).concat(app.aliasDomains), { overwriteDns }, progressCallback);
await dns.registerLocations([ { subdomain: app.location, domain: app.domain }].concat(app.secondaryDomains).concat(app.redirectDomains).concat(app.aliasDomains), { overwriteDns }, progressCallback);
}
// re-setup addons since they rely on the app's fqdn (e.g oauth)
@@ -723,7 +734,7 @@ async function uninstall(app, args, progressCallback) {
await docker.deleteImage(app.manifest);
await progressCallback({ percent: 70, message: 'Unregistering domains' });
await dns.unregisterLocations([ { subdomain: app.location, domain: app.domain } ].concat(app.redirectDomains).concat(app.aliasDomains), progressCallback);
await dns.unregisterLocations([ { subdomain: app.location, domain: app.domain } ].concat(app.secondaryDomains).concat(app.redirectDomains).concat(app.aliasDomains), progressCallback);
await progressCallback({ percent: 90, message: 'Cleanup logs' });
await cleanupLogs(app);