From 74aef36b1ec5f81deb5a8f039d57356c484d8992 Mon Sep 17 00:00:00 2001 From: Keagan O'Donoghue <56366381+k3agan@users.noreply.github.com> Date: Sun, 22 Oct 2023 07:26:12 -0400 Subject: [PATCH] ISSUE-13517: Added option to explicitly specify backup filename (#13661) * ISSUE-13517: Added option to explicitly specify output filename for metadata backup * format --------- Co-authored-by: Pere Miquel Brull --- ingestion/src/metadata/cli/backup.py | 9 ++++++--- ingestion/src/metadata/cmd.py | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ingestion/src/metadata/cli/backup.py b/ingestion/src/metadata/cli/backup.py index 7d59476e9d6..179c8d0535e 100644 --- a/ingestion/src/metadata/cli/backup.py +++ b/ingestion/src/metadata/cli/backup.py @@ -32,7 +32,7 @@ class UploadDestinationType(Enum): logger = cli_logger() -def get_output(output: Optional[str] = None) -> Path: +def get_output(output: Optional[str] = None, filename: Optional[str] = None) -> Path: """ Helper function to prepare the output backup file path and name. @@ -40,10 +40,11 @@ def get_output(output: Optional[str] = None) -> Path: It will create the output dir if it does not exist. :param output: local path to store the backup + :param filename: name of the backup file :return: backup file name """ now = datetime.now().strftime("%Y%m%d%H%M") - name = f"openmetadata_{now}_backup.sql" + name = filename if filename else f"openmetadata_{now}_backup.sql" if output: path = Path(output).expanduser() @@ -160,6 +161,7 @@ def upload_backup_azure(account_url: str, container: str, file: Path) -> None: def run_backup( common_backup_obj_instance: BackupRestoreArgs, output: Optional[str], + filename: Optional[str], upload_destination_type: Optional[UploadDestinationType], upload: Optional[Tuple[str, str, str]], ) -> None: @@ -169,6 +171,7 @@ def run_backup( :param common_backup_obj_instance: cls instance to fetch common args :param output: local path to store the backup + :param filename: filename to store the backup :param upload_destination_type: Azure or AWS Destination Type :param upload: URI to upload result file @@ -180,7 +183,7 @@ def run_backup( f"{common_backup_obj_instance.host}:{common_backup_obj_instance.port}/{common_backup_obj_instance.database}...", ) - out = get_output(output) + out = get_output(output, filename) engine = get_engine(common_args=common_backup_obj_instance) dump(engine=engine, output=out, schema=common_backup_obj_instance.schema) diff --git a/ingestion/src/metadata/cmd.py b/ingestion/src/metadata/cmd.py index 39883dbaf2f..d5cfc067ef8 100644 --- a/ingestion/src/metadata/cmd.py +++ b/ingestion/src/metadata/cmd.py @@ -236,6 +236,11 @@ def backup_args(parser: argparse.ArgumentParser): type=Path, default=None, ) + parser.add_argument( + "--filename", + help="Filename to store the backup", + default=None, + ) parser.add_argument( "--upload-destination-type", help="AWS or AZURE", @@ -444,6 +449,7 @@ def metadata(args=None): # pylint: disable=too-many-branches schema=contains_args.get("schema"), ), output=contains_args.get("output"), + filename=contains_args.get("filename"), upload_destination_type=contains_args.get("upload_destination_type"), upload=contains_args.get("upload"), )