add mongodb support, and sqlite restore path (config option only)

This commit is contained in:
Divyansh Singh 2023-06-15 02:18:24 +05:30
parent 205e5b1524
commit a9386b7a87
2 changed files with 68 additions and 11 deletions

View file

@ -952,16 +952,33 @@ properties:
Database hostname to connect to. Defaults to
connecting via local Unix socket.
example: database.example.org
restore_hostname:
type: string
description: |
Database hostname to restore to. Defaults to
the "hostname" option.
example: database.example.org
port:
type: integer
description: Port to connect to. Defaults to 3306.
example: 3307
restore_port:
type: integer
description: Port to restore to. Defaults to the
"port" option.
example: 5433
username:
type: string
description: |
Username with which to connect to the database.
Defaults to the username of the current user.
example: dbuser
restore_username:
type: string
description: |
Username with which to restore the database.
Defaults to the "username" option.
example: dbuser
password:
type: string
description: |
@ -970,6 +987,12 @@ properties:
configured to trust the configured username
without a password.
example: trustsome1
restore_password:
type: string
description: |
Password with which to connect to the restore
database. Defaults to the "password" option.
example: trustsome1
format:
type: string
enum: ['sql']
@ -1047,6 +1070,12 @@ properties:
read_special and one_file_system (see above) to
support dump and restore streaming.
example: /var/lib/sqlite/users.db
restore_path:
type: string
description: |
Path to the SQLite database file to restore to.
Defaults to the "path" option.
example: /var/lib/sqlite/users.db
mongodb_databases:
type: array
items:
@ -1069,22 +1098,45 @@ properties:
Database hostname to connect to. Defaults to
connecting to localhost.
example: database.example.org
restore_hostname:
type: string
description: |
Database hostname to restore to. Defaults to
the "hostname" option.
example: database.example.org
port:
type: integer
description: Port to connect to. Defaults to 27017.
example: 27018
restore_port:
type: integer
description: Port to restore to. Defaults to the
"port" option.
example: 5433
username:
type: string
description: |
Username with which to connect to the database.
Skip it if no authentication is needed.
example: dbuser
restore_username:
type: string
description: |
Username with which to restore the database.
Defaults to the "username" option.
example: dbuser
password:
type: string
description: |
Password with which to connect to the database.
Skip it if no authentication is needed.
example: trustsome1
restore_password:
type: string
description: |
Password with which to connect to the restore
database. Defaults to the "password" option.
example: trustsome1
authentication_database:
type: string
description: |

View file

@ -102,7 +102,7 @@ def make_database_dump_pattern(
return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process):
def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process, connection_params):
'''
Restore the given MongoDB database from an extract stream. The database is supplied as a
one-element sequence containing a dict describing the database, as per the configuration schema.
@ -122,7 +122,7 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
dump_filename = dump.make_database_dump_filename(
make_dump_path(location_config), database['name'], database.get('hostname')
)
restore_command = build_restore_command(extract_process, database, dump_filename)
restore_command = build_restore_command(extract_process, database, dump_filename, connection_params)
logger.debug(f"{log_prefix}: Restoring MongoDB database {database['name']}{dry_run_label}")
if dry_run:
@ -138,10 +138,15 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
)
def build_restore_command(extract_process, database, dump_filename):
def build_restore_command(extract_process, database, dump_filename, connection_params):
'''
Return the mongorestore command from a single database configuration.
'''
hostname = connection_params['hostname'] or database.get('restore_hostname', database.get('hostname'))
port = str(connection_params['port'] or database.get('restore_port', database.get('port')))
username = connection_params['username'] or database.get('restore_username', database.get('username'))
password = connection_params['password'] or database.get('restore_password', database.get('password'))
command = ['mongorestore']
if extract_process:
command.append('--archive')
@ -149,14 +154,14 @@ def build_restore_command(extract_process, database, dump_filename):
command.extend(('--dir', dump_filename))
if database['name'] != 'all':
command.extend(('--drop', '--db', database['name']))
if 'hostname' in database:
command.extend(('--host', database['hostname']))
if 'port' in database:
command.extend(('--port', str(database['port'])))
if 'username' in database:
command.extend(('--username', database['username']))
if 'password' in database:
command.extend(('--password', database['password']))
if hostname:
command.extend(('--host', hostname))
if port:
command.extend(('--port', str(port)))
if username:
command.extend(('--username', username))
if password:
command.extend(('--password', password))
if 'authentication_database' in database:
command.extend(('--authenticationDatabase', database['authentication_database']))
if 'restore_options' in database: