From 32b17ca5928c9aab4588146b54ce9d0703c879f5 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Thu, 7 Nov 2024 10:59:36 -0300 Subject: [PATCH] Backup parameters: terse and sensitive --- backup/forms.py | 13 ++++++++++- ...kupprofile_parameter_sensitive_and_more.py | 23 +++++++++++++++++++ backup/models.py | 3 +++ routerfleet/settings.py | 2 +- routerlib/backup_functions.py | 9 +++++++- 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 backup/migrations/0009_backupprofile_parameter_sensitive_and_more.py diff --git a/backup/forms.py b/backup/forms.py index 8179ae9..95750f3 100644 --- a/backup/forms.py +++ b/backup/forms.py @@ -14,7 +14,8 @@ class BackupProfileForm(forms.ModelForm): 'daily_day_wednesday', 'daily_day_thursday', 'daily_day_friday', 'daily_day_saturday', 'daily_day_sunday', 'weekly_day', 'monthly_day', 'daily_hour', 'weekly_hour', 'monthly_hour', - 'max_retry', 'retry_interval', 'backup_interval', 'retrieve_interval', 'instant_retention' + 'max_retry', 'retry_interval', 'backup_interval', 'retrieve_interval', 'instant_retention', + 'parameter_sensitive', 'parameter_terse' ] # widgets = { # 'weekly_day': forms.Select(), @@ -50,6 +51,8 @@ class BackupProfileForm(forms.ModelForm): self.fields['weekly_retention'].label = 'Retention (days)' self.fields['monthly_retention'].label = 'Retention (days)' self.fields['instant_retention'].label = 'Instant Retention (days)' + self.fields['parameter_sensitive'].label = 'sensitive' + self.fields['parameter_terse'].label = 'terse' if self.instance.pk and self.instance.name == 'default': self.fields['name'].widget.attrs['readonly'] = True @@ -93,6 +96,13 @@ class BackupProfileForm(forms.ModelForm): css_id='monthly_settings', css_class='row' ), + Div( + Div(HTML('

Parameters

'), css_class='col-md-12'), + Div('parameter_sensitive', css_class='col-md-6'), + Div('parameter_terse', css_class='col-md-6'), + css_id='misc_settings', css_class='row' + ), + Div( Div(HTML('

Backup Settings

'), css_class='col-md-12'), Div('max_retry', css_class='col-md-6'), @@ -103,6 +113,7 @@ class BackupProfileForm(forms.ModelForm): Div('retain_backups_on_error', css_class='col-md-12'), css_id='misc_settings', css_class='row' ), + Row( Column( Submit('submit', 'Save', css_class='btn btn-success'), diff --git a/backup/migrations/0009_backupprofile_parameter_sensitive_and_more.py b/backup/migrations/0009_backupprofile_parameter_sensitive_and_more.py new file mode 100644 index 0000000..8eb1544 --- /dev/null +++ b/backup/migrations/0009_backupprofile_parameter_sensitive_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.3 on 2024-11-07 13:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('backup', '0008_alter_backupprofile_backup_interval'), + ] + + operations = [ + migrations.AddField( + model_name='backupprofile', + name='parameter_sensitive', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='backupprofile', + name='parameter_terse', + field=models.BooleanField(default=False), + ), + ] diff --git a/backup/models.py b/backup/models.py index 0736468..d42ef68 100644 --- a/backup/models.py +++ b/backup/models.py @@ -23,6 +23,9 @@ class BackupProfile(models.Model): instant_retention = models.IntegerField(default=3650) retain_backups_on_error = models.BooleanField(default=True) + parameter_sensitive = models.BooleanField(default=False) + parameter_terse = models.BooleanField(default=False) + daily_day_monday = models.BooleanField(default=True) daily_day_tuesday = models.BooleanField(default=True) daily_day_wednesday = models.BooleanField(default=True) diff --git a/routerfleet/settings.py b/routerfleet/settings.py index 127752f..a5899b3 100644 --- a/routerfleet/settings.py +++ b/routerfleet/settings.py @@ -142,6 +142,6 @@ STATICFILES_DIRS = [ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' MEDIA_ROOT = '/var/lib/routerfleet/' -ROUTERFLEET_VERSION = 7021 +ROUTERFLEET_VERSION = 7022 from routerfleet.production_settings import * diff --git a/routerlib/backup_functions.py b/routerlib/backup_functions.py index 41da0d5..69d5dbc 100644 --- a/routerlib/backup_functions.py +++ b/routerlib/backup_functions.py @@ -80,11 +80,18 @@ def execute_backup(router_backup: RouterBackup): backup_name = gen_backup_name(router_backup) file_extension = get_router_backup_file_extension(router.router_type) ssh_client = None + additional_parameters = "" try: if router_backup.router.router_type == 'routeros': + if router.backup_profile: + if router.backup_profile.parameter_sensitive: + additional_parameters += ' show-sensitive' + if router.backup_profile.parameter_terse: + additional_parameters += ' terse' + ssh_client = connect_to_ssh(router.address, router.port, router.username, router.password, router.ssh_key) ssh_client.exec_command(f'/system backup save name={backup_name}.{file_extension["binary"]}') - ssh_client.exec_command(f'/export file={backup_name}.{file_extension["text"]}') + ssh_client.exec_command(f'/export file={backup_name}.{file_extension["text"]} {additional_parameters}') return True, [f'{backup_name}.{file_extension["binary"]}', f'{backup_name}.{file_extension["text"]}'], error_message elif router_backup.router.router_type == 'openwrt': ssh_client = connect_to_ssh(router.address, router.port, router.username, router.password, router.ssh_key)