diff --git a/dashboard/src/components/BackupDialog.vue b/dashboard/src/components/BackupDialog.vue
deleted file mode 100644
index 6a2faaf6f..000000000
--- a/dashboard/src/components/BackupDialog.vue
+++ /dev/null
@@ -1,210 +0,0 @@
-
-
-
-
-
diff --git a/dashboard/src/components/BackupList.vue b/dashboard/src/components/BackupList.vue
index ea6abc68c..d4bd4a7b7 100644
--- a/dashboard/src/components/BackupList.vue
+++ b/dashboard/src/components/BackupList.vue
@@ -304,6 +304,8 @@ onMounted(async () => {
+
+
diff --git a/dashboard/src/components/BackupProviderForm.vue b/dashboard/src/components/BackupProviderForm.vue
index cd9ba3765..395937c7d 100644
--- a/dashboard/src/components/BackupProviderForm.vue
+++ b/dashboard/src/components/BackupProviderForm.vue
@@ -2,7 +2,6 @@
import { ref, onMounted, watch } from 'vue';
import { Button, InputGroup, SingleSelect, FormGroup, TextInput, Checkbox, PasswordInput, NumberInput } from '@cloudron/pankow';
-import { prettyBinarySize } from '@cloudron/pankow/utils';
import { BACKUP_FORMATS, STORAGE_PROVIDERS, REGIONS_CONTABO, REGIONS_VULTR, REGIONS_IONOS, REGIONS_OVH, REGIONS_LINODE, REGIONS_SCALEWAY, REGIONS_EXOSCALE, REGIONS_DIGITALOCEAN, REGIONS_HETZNER, REGIONS_WASABI, REGIONS_S3 } from '../constants.js';
import ProvisionModel from '../models/ProvisionModel.js';
import SystemModel from '../models/SystemModel.js';
@@ -37,10 +36,6 @@ const blockDevices = ref([]);
const disk = ref('');
const gcsKeyFileName = ref('');
const gcsFileParseError = ref('');
-const advancedVisible = ref(false);
-
-const minMemoryLimit = ref(1024 * 1024 * 1024); // 1 GB
-const maxMemoryLimit = ref(minMemoryLimit.value); // set later
function onGcsKeyChange(event) {
gcsFileParseError.value = '';
@@ -101,18 +96,6 @@ async function getBlockDevices() {
.filter(d => { return d.type === 'xfs' || d.type === 'ext4'; });
}
-async function getMemory() {
- if (props.provisioning) {
- maxMemoryLimit.value = 4 * 1024 * 1024 * 1024;
- return;
- }
-
- const [error, result] = await systemModel.memory();
- if (error) return console.error(error);
-
- maxMemoryLimit.value = Math.ceil(result.memory / (1024*1024*1024)) * 1024 * 1024 * 1024;
-}
-
watch(provider, (newProvider) => {
if (newProvider === 'scaleway-objectstorage') {
// scaleway only supports 1000 parts per object (https://www.scaleway.com/en/docs/s3-multipart-upload/)
@@ -125,7 +108,6 @@ watch(provider, (newProvider) => {
});
onMounted(async () => {
- await getMemory();
await getBlockDevices();
});
@@ -306,48 +288,5 @@ onMounted(async () => {
{{ $t('backups.configureBackupStorage.encryptionDescription') }}
-
- {{ $t('backups.configureBackupStorage.advancedSettings') }}
-
diff --git a/dashboard/src/components/BackupTargetDialog.vue b/dashboard/src/components/BackupTargetDialog.vue
new file mode 100644
index 000000000..be47b1e34
--- /dev/null
+++ b/dashboard/src/components/BackupTargetDialog.vue
@@ -0,0 +1,432 @@
+
+
+
+
+
diff --git a/dashboard/src/models/BackupTargetsModel.js b/dashboard/src/models/BackupTargetsModel.js
index 90e75787d..70703d7ba 100644
--- a/dashboard/src/models/BackupTargetsModel.js
+++ b/dashboard/src/models/BackupTargetsModel.js
@@ -20,10 +20,16 @@ function create() {
if (error || result.status !== 200) return [error || result];
return [null, result.body.backupTargets];
},
- async add(label, format, provider, config) {
+ async add(label, format, provider, config, schedule, retention, limits = null, encryptionPassword = null, encryptedFilenames = null) {
+ const data = { label, format, provider, config, schedule, retention };
+
+ if (limits !== null) data.limits = limits;
+ if (encryptionPassword !== null) data.encryptionPassword = encryptionPassword;
+ if (encryptedFilenames !== null) data.encryptedFilenames = encryptedFilenames;
+
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets`, { label, format, provider, config }, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets`, data, { access_token: accessToken });
} catch (e) {
error = e;
}
@@ -68,7 +74,7 @@ function create() {
async setPrimary(id) {
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/primary`, {}, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/configure/primary`, {}, { access_token: accessToken });
} catch (e) {
error = e;
}
@@ -79,7 +85,7 @@ function create() {
async setRetention(id, retention) {
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/retention`, { retention }, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/configure/retention`, { retention }, { access_token: accessToken });
} catch (e) {
error = e;
}
@@ -90,7 +96,7 @@ function create() {
async setLimits(id, limits) {
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/limits`, { limits }, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/configure/limits`, { limits }, { access_token: accessToken });
} catch (e) {
error = e;
}
@@ -101,7 +107,7 @@ function create() {
async setSchedule(id, schedule) {
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/schedule`, { schedule }, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/configure/schedule`, { schedule }, { access_token: accessToken });
} catch (e) {
error = e;
}
@@ -112,7 +118,7 @@ function create() {
async setConfig(id, config) {
let error, result;
try {
- result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/config`, { config }, { access_token: accessToken });
+ result = await fetcher.post(`${API_ORIGIN}/api/v1/backup_targets/${id}/configure/config`, { config }, { access_token: accessToken });
} catch (e) {
error = e;
}
diff --git a/dashboard/src/views/BackupTargetsView.vue b/dashboard/src/views/BackupTargetsView.vue
index d1cee1677..7711140c0 100644
--- a/dashboard/src/views/BackupTargetsView.vue
+++ b/dashboard/src/views/BackupTargetsView.vue
@@ -1,12 +1,15 @@