Add portbinding handling when restoring apps from archive
This commit is contained in:
@@ -80,7 +80,6 @@ const domains = ref([]);
|
||||
const restoreSecondaryDomains = ref([]);
|
||||
|
||||
async function onRestore(archive) {
|
||||
console.log(archive)
|
||||
restoreBusy.value = false;
|
||||
restoreError.value = {};
|
||||
|
||||
@@ -96,16 +95,19 @@ async function onRestore(archive) {
|
||||
portBindings: {}
|
||||
}; // pre-8.2 backups do not have appConfig
|
||||
|
||||
// appConfig also has a manifest but it has incomplete port objects!
|
||||
const manifest = archive.manifest;
|
||||
|
||||
restoreLocation.value = app.subdomain;
|
||||
const d = domains.value.find(function (d) { return app.domain === d.domain; });
|
||||
restoreDomain.value = d ? d.domain : domains.value[0].domain; // try to pre-select the app's domain
|
||||
restoreSecondaryDomains.value = {};
|
||||
restoreNeedsOverwrite.value = false;
|
||||
restoreArchive.value = archive;
|
||||
restoreFqdn.value =archive.appConfig?.fqdn || '-';
|
||||
restoreManifest.value = archive.manifest;
|
||||
restoreFqdn.value = archive.appConfig?.fqdn || '-';
|
||||
restoreManifest.value = manifest;
|
||||
|
||||
const httpPorts = archive.manifest.httpPorts || {};
|
||||
const httpPorts = manifest.httpPorts || {};
|
||||
for (const env in httpPorts) {
|
||||
restoreSecondaryDomains.value[env] = {
|
||||
title: httpPorts[env].title,
|
||||
@@ -125,25 +127,29 @@ async function onRestore(archive) {
|
||||
});
|
||||
}
|
||||
|
||||
// Portbinding map only for information
|
||||
restoreTcpPorts.value = archive.manifest.tcpPorts || {};
|
||||
restoreUdpPorts.value = archive.manifest.udpPorts || {};
|
||||
// Portbinding map only for information we make copies
|
||||
restoreTcpPorts.value = manifest.tcpPorts ? JSON.parse(JSON.stringify(manifest.tcpPorts)) : {};
|
||||
restoreUdpPorts.value = manifest.udpPorts ? JSON.parse(JSON.stringify(manifest.udpPorts)) : {};
|
||||
|
||||
// set default ports for tcp
|
||||
for (const env in restoreTcpPorts.value) {
|
||||
if (archive.portBindings[env]) { // was enabled in the app
|
||||
restoreTcpPorts.value[env] = app.portBindings[env].hostPort;
|
||||
if (app.portBindings[env]) { // was enabled in the app
|
||||
restoreTcpPorts.value[env].value = app.portBindings[env].hostPort;
|
||||
restoreTcpPorts.value[env].enabled = true;
|
||||
} else {
|
||||
restoreTcpPorts.value[env] = restoreTcpPorts.value[env].defaultValue || 0;
|
||||
restoreTcpPorts.value[env].value = restoreTcpPorts.value[env].defaultValue || 0;
|
||||
restoreTcpPorts.value[env].enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// set default ports for udp
|
||||
for (const env in restoreUdpPorts.value) {
|
||||
if (archive.portBindings[env]) { // was enabled in the app
|
||||
restoreUdpPorts.value[env] = app.portBindings[env].hostPort;
|
||||
if (app.portBindings[env]) { // was enabled in the app
|
||||
restoreUdpPorts.value[env].value = app.portBindings[env].hostPort;
|
||||
restoreUdpPorts.value[env].enabled = true;
|
||||
} else {
|
||||
restoreUdpPorts.value[env] = restoreUdpPorts.value[env].defaultValue || 0;
|
||||
restoreUdpPorts.value[env].value = restoreUdpPorts.value[env].defaultValue || 0;
|
||||
restoreUdpPorts.value[env].enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,41 +169,26 @@ async function onRestoreSubmit() {
|
||||
}
|
||||
|
||||
// only use enabled ports
|
||||
// const finalPorts = {};
|
||||
// for (var env in $scope.archiveRestore.ports) {
|
||||
// if ($scope.archiveRestore.portsEnabled[env]) {
|
||||
// finalPorts[env] = $scope.archiveRestore.ports[env];
|
||||
// }
|
||||
// }
|
||||
const finalPorts = {};
|
||||
for (const env in restoreTcpPorts.value) {
|
||||
if (restoreTcpPorts.value[env].enabled) {
|
||||
finalPorts[env] = restoreTcpPorts.value[env].value;
|
||||
}
|
||||
}
|
||||
for (const env in restoreUdpPorts.value) {
|
||||
if (restoreUdpPorts.value[env].enabled) {
|
||||
finalPorts[env] = restoreUdpPorts.value[env].value;
|
||||
}
|
||||
}
|
||||
|
||||
const data = {
|
||||
subdomain: restoreLocation.value,
|
||||
domain: restoreDomain.value,
|
||||
secondaryDomains,
|
||||
// ports: finalPorts,
|
||||
ports: {},
|
||||
ports: finalPorts,
|
||||
overwriteDns: restoreNeedsOverwrite.value,
|
||||
};
|
||||
|
||||
|
||||
// Client.unarchiveApp($scope.archiveRestore.archive.id, data, function (error/*, newApp */) {
|
||||
// $scope.archiveRestore.busy = false;
|
||||
|
||||
// if (error) {
|
||||
// var errorMessage = error.message.toLowerCase();
|
||||
// if (errorMessage.indexOf('port') !== -1) {
|
||||
// $scope.archiveRestore.error.port = error.message;
|
||||
// } else if (error.message.indexOf('location') !== -1 || error.message.indexOf('subdomain') !== -1) {
|
||||
// // TODO extract fqdn from error message, currently we just set it always to the main location
|
||||
// $scope.archiveRestore.error.location = { type: 'internally_exists', fqdn: data.subdomain + '.' + data.domain, message: error.message };
|
||||
// $('#cloneLocationInput').focus();
|
||||
// } else {
|
||||
// Client.error(error);
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
|
||||
const [error] = await archivesModel.restore(restoreArchive.value.id, data);
|
||||
if (error) {
|
||||
if (error.type === 'externally_exists') {
|
||||
@@ -277,7 +268,7 @@ onMounted(async () => {
|
||||
|
||||
<!-- <p class="text-small text-warning" ng-show="archiveRestore.domain.provider === 'noop' || archiveRestore.domain.provider === 'manual'" ng-bind-html="'appstore.installDialog.manualWarning' | tr:{ location: ((archiveRestore.subdomain ? archiveRestore.subdomain + '.' : '') + archiveRestore.domain.domain) }"></p> -->
|
||||
<!-- <div class="has-error text-center" ng-show="archiveRestore.error.port">{{ archiveRestore.error.port }}</div> -->
|
||||
<PortBindings v-model:tcp-ports="tcpPorts" v-model:udp-ports="udpPorts" :error="restoreError"/>
|
||||
<PortBindings v-model:tcp-ports="restoreTcpPorts" v-model:udp-ports="restoreUdpPorts" :error="restoreError"/>
|
||||
</fieldset>
|
||||
</form>
|
||||
</Dialog>
|
||||
|
||||
Reference in New Issue
Block a user