#2561 - Set the DatabaseServer service to automatically install the upon install to enable backup. Added some defensive statements that gracefully handle backup/restore requests when FTPClient is not installed.
This commit is contained in:
@@ -42,6 +42,11 @@ class DatabaseService(Service):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self._create_db_file()
|
self._create_db_file()
|
||||||
|
|
||||||
|
def install(self):
|
||||||
|
super().install()
|
||||||
|
if not self.software_manager.software.get("FTPClient"):
|
||||||
|
self.sys_log.info(f"{self.name}: Installing FTPClient to enable database backups")
|
||||||
|
self.software_manager.install(FTPClient)
|
||||||
def configure_backup(self, backup_server: IPv4Address):
|
def configure_backup(self, backup_server: IPv4Address):
|
||||||
"""
|
"""
|
||||||
Set up the database backup.
|
Set up the database backup.
|
||||||
@@ -64,9 +69,17 @@ class DatabaseService(Service):
|
|||||||
software_manager: SoftwareManager = self.software_manager
|
software_manager: SoftwareManager = self.software_manager
|
||||||
ftp_client_service: FTPClient = software_manager.software.get("FTPClient")
|
ftp_client_service: FTPClient = software_manager.software.get("FTPClient")
|
||||||
|
|
||||||
|
if not ftp_client_service:
|
||||||
|
self.sys_log.error(
|
||||||
|
f"{self.name}: Failed to perform database backup as the FTPClient software is not installed"
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
|
||||||
# send backup copy of database file to FTP server
|
# send backup copy of database file to FTP server
|
||||||
if not self.db_file:
|
if not self.db_file:
|
||||||
self.sys_log.error("Attempted to backup database file but it doesn't exist.")
|
self.sys_log.error(
|
||||||
|
f"{self.name}: Attempted to backup database file but it doesn't exist."
|
||||||
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
response = ftp_client_service.send_file(
|
response = ftp_client_service.send_file(
|
||||||
@@ -92,6 +105,12 @@ class DatabaseService(Service):
|
|||||||
software_manager: SoftwareManager = self.software_manager
|
software_manager: SoftwareManager = self.software_manager
|
||||||
ftp_client_service: FTPClient = software_manager.software.get("FTPClient")
|
ftp_client_service: FTPClient = software_manager.software.get("FTPClient")
|
||||||
|
|
||||||
|
if not ftp_client_service:
|
||||||
|
self.sys_log.error(
|
||||||
|
f"{self.name}: Failed to restore database backup as the FTPClient software is not installed"
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
|
||||||
# retrieve backup file from backup server
|
# retrieve backup file from backup server
|
||||||
response = ftp_client_service.request_file(
|
response = ftp_client_service.request_file(
|
||||||
src_folder_name=str(self.uuid),
|
src_folder_name=str(self.uuid),
|
||||||
|
|||||||
@@ -356,3 +356,8 @@ def test_client_connection_terminate_does_not_terminate_another_clients_connecti
|
|||||||
|
|
||||||
assert db_connection_b.query("SELECT")
|
assert db_connection_b.query("SELECT")
|
||||||
assert len(db_service.connections) == 1
|
assert len(db_service.connections) == 1
|
||||||
|
|
||||||
|
def test_database_server_install_ftp_client():
|
||||||
|
server = Server(hostname="db_server", ip_address="192.168.1.2", subnet_mask="255.255.255.0", start_up_duration=0)
|
||||||
|
server.software_manager.install(DatabaseService)
|
||||||
|
assert server.software_manager.software.get("FTPClient")
|
||||||
Reference in New Issue
Block a user