From c6dc22cdeaaffcd0212e5e031cfabf59c6405bb5 Mon Sep 17 00:00:00 2001 From: Sergey Abramov Date: Tue, 19 Apr 2016 17:07:36 +0300 Subject: [PATCH] Add full repo backup Required for backup repositories in master node if there aren't deployed environment. Usage: octane fuel-repo-backup --to backup_path --full Change-Id: Ic9560edd3390f63ff015d68c0b5747351b19cf66 --- octane/commands/backup.py | 14 ++++++++++++++ octane/handlers/backup_restore/__init__.py | 5 +++++ octane/handlers/backup_restore/mirrors.py | 22 ++++++++++++++++++++++ octane/magic_consts.py | 2 ++ 4 files changed, 43 insertions(+) diff --git a/octane/commands/backup.py b/octane/commands/backup.py index ec362d90..05571736 100644 --- a/octane/commands/backup.py +++ b/octane/commands/backup.py @@ -73,3 +73,17 @@ class BackupCommand(BaseBackupCommand): class BackupRepoCommand(BaseBackupCommand): archivators = backup_restore.REPO_ARCHIVATORS + full_archivators = backup_restore.FULL_REPO_ARCHIVATORS + + def get_parser(self, *args, **kwargs): + parser = super(BackupRepoCommand, self).get_parser(*args, **kwargs) + parser.add_argument( + "--full", + action='store_true', + help="Backup all repositories") + return parser + + def take_action(self, parsed_args): + if parsed_args.full: + self.archivators = self.full_archivators + super(BackupRepoCommand, self).take_action(parsed_args) diff --git a/octane/handlers/backup_restore/__init__.py b/octane/handlers/backup_restore/__init__.py index 02d60274..947e3f2f 100644 --- a/octane/handlers/backup_restore/__init__.py +++ b/octane/handlers/backup_restore/__init__.py @@ -46,6 +46,11 @@ REPO_ARCHIVATORS = [ mirrors.RepoBackup, ] +FULL_REPO_ARCHIVATORS = [ + mirrors.FullMirrorsBackup, + mirrors.FullRepoBackup, +] + class NailgunCredentialsContext(object): diff --git a/octane/handlers/backup_restore/mirrors.py b/octane/handlers/backup_restore/mirrors.py index 7165bdfe..1f58052f 100644 --- a/octane/handlers/backup_restore/mirrors.py +++ b/octane/handlers/backup_restore/mirrors.py @@ -16,6 +16,7 @@ import urlparse from octane.handlers.backup_restore import base +from octane import magic_consts from octane.util import helpers from octane.util import sql @@ -64,3 +65,24 @@ class RepoBackup(NaigunWWWBackup): def _get_values_list(self, data): return data['provision']['image_data'].values() + + +class FullMirrorsBackup(NaigunWWWBackup): + + name = "mirrors" + sql = "select array_to_json(array_agg(distinct version)) from releases;" + + def _get_mirrors(self): + results = sql.run_psql_in_container(self.sql, self.db) + releases = [] + for dir_name in magic_consts.MIRRORS_EXTRA_DIRS: + if os.path.exists(os.path.join(self.path, dir_name)): + releases.append(dir_name) + for line in results: + releases.extend(json.loads(line)) + return releases + + +class FullRepoBackup(base.PathArchivator): + name = 'repos/targetimages' + path = '/var/www/nailgun/targetimages' diff --git a/octane/magic_consts.py b/octane/magic_consts.py index 2d2b3208..7f4b5c83 100644 --- a/octane/magic_consts.py +++ b/octane/magic_consts.py @@ -78,3 +78,5 @@ OSD_REPOS_UPDATE = [ ), ] COBBLER_DROP_VERSION = "7.0" + +MIRRORS_EXTRA_DIRS = ["ubuntu-full", "mos-ubuntu"]