Module cvpysdk.subclients.postgressubclient
File for operating on a Postgres Server Subclient
PostgresSubclient is the only class defined in this file.
PostgresSubclient: Derived class from Subclient Base class, representing a HANA server subclient, and to perform operations on that subclient
PostgresSubclient:
set_content() -- Adds/Updates/Deletes the postgresql subclient contents
collect_object_list() -- Sets the collect object list flag for the subclient
as the value provided as input
_backup_request_json() -- prepares the json for the backup request
_get_subclient_properties() -- gets the subclient related properties of
PostgreSQL subclient
_get_subclient_properties_json() -- gets all the subclient related properties of
PostgreSQL subclient
backup() -- Runs a backup job for the subclient of the
level specified
restore_postgres_server() -- Method to restore the Postgres server
PostgresSubclient instance Attributes
**content** -- returns list of databases which are part
of subclient content
**collect_object_list** -- Returns the collect object list flag of the subclient
Expand source code Browse git
# -*- coding: utf-8 -*-
# --------------------------------------------------------------------------
# Copyright Commvault Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# --------------------------------------------------------------------------
"""File for operating on a Postgres Server Subclient
PostgresSubclient is the only class defined in this file.
PostgresSubclient: Derived class from Subclient Base class, representing a HANA server subclient,
and to perform operations on that subclient
PostgresSubclient:
==================
set_content() -- Adds/Updates/Deletes the postgresql subclient contents
collect_object_list() -- Sets the collect object list flag for the subclient
as the value provided as input
_backup_request_json() -- prepares the json for the backup request
_get_subclient_properties() -- gets the subclient related properties of
PostgreSQL subclient
_get_subclient_properties_json() -- gets all the subclient related properties of
PostgreSQL subclient
backup() -- Runs a backup job for the subclient of the
level specified
restore_postgres_server() -- Method to restore the Postgres server
PostgresSubclient instance Attributes
=====================================
**content** -- returns list of databases which are part
of subclient content
**collect_object_list** -- Returns the collect object list flag of the subclient
"""
from __future__ import unicode_literals
from .dbsubclient import DatabaseSubclient
from ..exception import SDKException
class PostgresSubclient(DatabaseSubclient):
"""Derived class from Subclient Base class, representing a file system subclient,
and to perform operations on that subclient."""
def __init__(self, backupset_object, subclient_name, subclient_id=None):
"""
Constructor for the class
Args:
backupset_object (object) -- instance of the Backupset class
subclient_name (str) -- name of the subclient
subclient_id (str) -- id of the subclient
"""
self._postgres_properties = {}
self._postgres_browse_options = None
self._postgres_destination = None
self._postgres_file_options = None
self._postgres_restore_options = None
super(PostgresSubclient, self).__init__(
backupset_object, subclient_name, subclient_id)
@property
def content(self):
"""returns list of databases which are part of subclient content"""
self._content = None
if not self.is_default_subclient:
if 'content' in self._subclient_properties:
self._content = self._subclient_properties['content']
if not self._content is None:
database_list = list()
for database in self._content:
if database.get('postgreSQLContent'):
if database['postgreSQLContent'].get('databaseName'):
database_list.append(database[
'postgreSQLContent']['databaseName'].lstrip("/"))
return database_list
def set_content(self, database_list, operation_type="OVERWRITE"):
""" Adds/Updates/Deletes the postgresql subclient contents
Args:
database_list (list) -- list of databases to be added to the subclient content
operation_type (str) -- Content operation to be performed
Accepted Values:
ADD -- Adds the database list to existing content
OVERWRITE -- Replaces the content with given databases
DELETE -- Deletes the database from the content
Raises:
SDKException:
if database list is not a list
if operation type is not accepted value
if the database list is empty
if the operation is performed on default subclient
"""
if not isinstance(database_list, list):
raise SDKException('Subclient', '101')
if operation_type.lower() not in ['add', 'overwrite', 'delete']:
raise SDKException('Subclient', '102', 'Operation type not supported')
if not database_list:
raise SDKException('Subclient', '102', 'Cannot set empty content to a subclient')
if self.is_default_subclient:
raise SDKException('Subclient', '102', 'Cannot set content to the default subclient')
operation_map = {
'add' : 2,
'overwrite': 1,
'delete': 3
}
properties = self._subclient_properties
content_list = []
for database in database_list:
content_dict = {
'postgreSQLContent':
{
'databaseName': f'{database}'
}
}
content_list.append(content_dict)
properties['contentOperationType'] = operation_map[operation_type.lower()]
properties['content'] = content_list
self.update_properties(properties)
@property
def collect_object_list(self):
"""Returns the collect object list flag of the subclient.
Returns:
(bool) -- True if flag is set
False if the flag is not set
"""
return self._subclient_properties.get(
'postgreSQLSubclientProp', {}).get(
'collectObjectListDuringBackup', False)
@collect_object_list.setter
def collect_object_list(self, value):
"""Sets the collect object list flag for the subclient as the value provided as input.
Args:
value (bool) -- Boolean value to set as flag
Raises:
SDKException:
if failed to set collect object list flag
if the type of value input is not bool
"""
if isinstance(value, bool):
self._set_subclient_properties(
"_subclient_properties['postgreSQLSubclientProp']['collectObjectListDuringBackup']",
value)
else:
raise SDKException(
'Subclient', '102', 'Expecting a boolean value here'
)
def _backup_request_json(
self,
backup_level,
inc_with_data=False):
"""
prepares the json for the backup request
Args:
backup_level (list) -- level of backup the user wish to run
Full / Incremental / Differential
inc_with_data (bool) -- flag to determine if the incremental backup
includes data or not
Returns:
dict - JSON request to pass to the API
"""
request_json = self._backup_json(backup_level, False, "BEFORE_SYNTH")
if "incremental" in backup_level.lower() and inc_with_data:
request_json["taskInfo"]["subTasks"][0]["options"][
"backupOpts"]['incrementalDataWithLogs'] = True
return request_json
def _get_subclient_properties(self):
"""gets the subclient related properties of PostgreSQL subclient.
"""
super(PostgresSubclient, self)._get_subclient_properties()
if 'postgreSQLSubclientProp' not in self._subclient_properties:
self._subclient_properties['postgreSQLSubclientProp'] = {}
self._postgres_properties = self._subclient_properties['postgreSQLSubclientProp']
def _get_subclient_properties_json(self):
"""gets all the subclient related properties of PostgreSQL subclient.
Returns:
dict - all subclient properties put inside a dict
"""
subclient_json = {
"subClientProperties":
{
"postgreSQLSubclientProp": self._postgres_properties,
"proxyClient": self._proxyClient,
"subClientEntity": self._subClientEntity,
"content": self._content,
"commonProperties": self._commonProperties,
"contentOperationType": 1
}
}
return subclient_json
def backup(
self,
backup_level="Differential",
inc_with_data=False):
"""Runs a backup job for the subclient of the level specified.
Args:
backup_level (str) -- level of backup the user wish to run
Full / Incremental / Differential / Synthetic_full
default: Differential
inc_with_data (bool) -- flag to determine if the incremental backup
includes data or not
Returns:
object - instance of the Job class for this backup job
Raises:
SDKException:
if backup level specified is not correct
if response is empty
if response is not success
"""
backup_level = backup_level.lower()
if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']:
raise SDKException('Subclient', '103')
if not inc_with_data:
return super(PostgresSubclient, self).backup(backup_level)
request_json = self._backup_request_json(
backup_level, inc_with_data)
flag, response = self._commcell_object._cvpysdk_object.make_request(
'POST', self._commcell_object._services['CREATE_TASK'], request_json
)
return self._process_backup_response(flag, response)
def restore_postgres_server(
self,
database_list=None,
dest_client_name=None,
dest_instance_name=None,
copy_precedence=None,
from_time=None,
to_time=None,
clone_env=False,
clone_options=None,
media_agent=None,
table_level_restore=False,
staging_path=None,
no_of_streams=None,
volume_level_restore=False,
redirect_enabled=False,
redirect_path=None,
**kwargs):
"""
Method to restore the Postgres server
Args:
database_list (List) -- List of databases
dest_client_name (str) -- Destination Client name
dest_instance_name (str) -- Destination Instance name
copy_precedence (int) -- Copy precedence associted with storage
from_time (str) -- time to retore the contents after
format: YYYY-MM-DD HH:MM:SS
default: None
to_time (str) -- time to retore the contents before
format: YYYY-MM-DD HH:MM:SS
default: None
clone_env (bool) -- boolean to specify whether the database
should be cloned or not
default: False
clone_options (dict) -- clone restore options passed in a dict
default: None
Accepted format: {
"stagingLocaion": "/gk_snap",
"forceCleanup": True,
"port": "5595",
"libDirectory": "/opt/PostgreSQL/9.6/lib",
"isInstanceSelected": True,
"reservationPeriodS": 3600,
"user": "postgres",
"binaryDirectory": "/opt/PostgreSQL/9.6/bin"
}
media_agent (str) -- media agent name
default: None
table_level_restore (bool) -- boolean to specify if the restore operation
is table level
default: False
staging_path (str) -- staging path location for table level restore
default: None
no_of_streams (int) -- number of streams to be used by
volume level restore
default: None
volume_level_restore (bool) -- volume level restore flag
default: False
redirect_enabled (bool) -- boolean to specify if redirect restore is
enabled
default: False
redirect_path (str) -- Path specified in advanced restore options
in order to perform redirect restore
default: None
revert (bool) -- boolean to specify whether to do a
hardware revert in restore
default: False
Returns:
object -- Job containing restore details
"""
backup_set_object = self._backupset_object
instance_object = backup_set_object._instance_object
if dest_client_name is None:
dest_client_name = instance_object._agent_object._client_object.client_name
if dest_instance_name is None:
dest_instance_name = instance_object.instance_name
backupset_name = backup_set_object.backupset_name
if backupset_name.lower() == "fsbasedbackupset":
backupset_flag = True
if database_list is None:
database_list = ["/data"]
else:
backupset_flag = False
instance_object._restore_association = self._subClientEntity
return instance_object.restore_in_place(
database_list,
dest_client_name,
dest_instance_name,
backupset_name,
backupset_flag,
copy_precedence=copy_precedence,
from_time=from_time,
to_time=to_time,
clone_env=clone_env,
clone_options=clone_options,
media_agent=media_agent,
table_level_restore=table_level_restore,
staging_path=staging_path,
no_of_streams=no_of_streams,
volume_level_restore=volume_level_restore,
redirect_enabled=redirect_enabled,
redirect_path=redirect_path,
revert=kwargs.get("revert", False))
Classes
class PostgresSubclient (backupset_object, subclient_name, subclient_id=None)
-
Derived class from Subclient Base class, representing a file system subclient, and to perform operations on that subclient.
Constructor for the class
Args
backupset_object (object) – instance of the Backupset class
subclient_name (str) – name of the subclient
subclient_id (str) – id of the subclient
Expand source code Browse git
class PostgresSubclient(DatabaseSubclient): """Derived class from Subclient Base class, representing a file system subclient, and to perform operations on that subclient.""" def __init__(self, backupset_object, subclient_name, subclient_id=None): """ Constructor for the class Args: backupset_object (object) -- instance of the Backupset class subclient_name (str) -- name of the subclient subclient_id (str) -- id of the subclient """ self._postgres_properties = {} self._postgres_browse_options = None self._postgres_destination = None self._postgres_file_options = None self._postgres_restore_options = None super(PostgresSubclient, self).__init__( backupset_object, subclient_name, subclient_id) @property def content(self): """returns list of databases which are part of subclient content""" self._content = None if not self.is_default_subclient: if 'content' in self._subclient_properties: self._content = self._subclient_properties['content'] if not self._content is None: database_list = list() for database in self._content: if database.get('postgreSQLContent'): if database['postgreSQLContent'].get('databaseName'): database_list.append(database[ 'postgreSQLContent']['databaseName'].lstrip("/")) return database_list def set_content(self, database_list, operation_type="OVERWRITE"): """ Adds/Updates/Deletes the postgresql subclient contents Args: database_list (list) -- list of databases to be added to the subclient content operation_type (str) -- Content operation to be performed Accepted Values: ADD -- Adds the database list to existing content OVERWRITE -- Replaces the content with given databases DELETE -- Deletes the database from the content Raises: SDKException: if database list is not a list if operation type is not accepted value if the database list is empty if the operation is performed on default subclient """ if not isinstance(database_list, list): raise SDKException('Subclient', '101') if operation_type.lower() not in ['add', 'overwrite', 'delete']: raise SDKException('Subclient', '102', 'Operation type not supported') if not database_list: raise SDKException('Subclient', '102', 'Cannot set empty content to a subclient') if self.is_default_subclient: raise SDKException('Subclient', '102', 'Cannot set content to the default subclient') operation_map = { 'add' : 2, 'overwrite': 1, 'delete': 3 } properties = self._subclient_properties content_list = [] for database in database_list: content_dict = { 'postgreSQLContent': { 'databaseName': f'{database}' } } content_list.append(content_dict) properties['contentOperationType'] = operation_map[operation_type.lower()] properties['content'] = content_list self.update_properties(properties) @property def collect_object_list(self): """Returns the collect object list flag of the subclient. Returns: (bool) -- True if flag is set False if the flag is not set """ return self._subclient_properties.get( 'postgreSQLSubclientProp', {}).get( 'collectObjectListDuringBackup', False) @collect_object_list.setter def collect_object_list(self, value): """Sets the collect object list flag for the subclient as the value provided as input. Args: value (bool) -- Boolean value to set as flag Raises: SDKException: if failed to set collect object list flag if the type of value input is not bool """ if isinstance(value, bool): self._set_subclient_properties( "_subclient_properties['postgreSQLSubclientProp']['collectObjectListDuringBackup']", value) else: raise SDKException( 'Subclient', '102', 'Expecting a boolean value here' ) def _backup_request_json( self, backup_level, inc_with_data=False): """ prepares the json for the backup request Args: backup_level (list) -- level of backup the user wish to run Full / Incremental / Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not Returns: dict - JSON request to pass to the API """ request_json = self._backup_json(backup_level, False, "BEFORE_SYNTH") if "incremental" in backup_level.lower() and inc_with_data: request_json["taskInfo"]["subTasks"][0]["options"][ "backupOpts"]['incrementalDataWithLogs'] = True return request_json def _get_subclient_properties(self): """gets the subclient related properties of PostgreSQL subclient. """ super(PostgresSubclient, self)._get_subclient_properties() if 'postgreSQLSubclientProp' not in self._subclient_properties: self._subclient_properties['postgreSQLSubclientProp'] = {} self._postgres_properties = self._subclient_properties['postgreSQLSubclientProp'] def _get_subclient_properties_json(self): """gets all the subclient related properties of PostgreSQL subclient. Returns: dict - all subclient properties put inside a dict """ subclient_json = { "subClientProperties": { "postgreSQLSubclientProp": self._postgres_properties, "proxyClient": self._proxyClient, "subClientEntity": self._subClientEntity, "content": self._content, "commonProperties": self._commonProperties, "contentOperationType": 1 } } return subclient_json def backup( self, backup_level="Differential", inc_with_data=False): """Runs a backup job for the subclient of the level specified. Args: backup_level (str) -- level of backup the user wish to run Full / Incremental / Differential / Synthetic_full default: Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not Returns: object - instance of the Job class for this backup job Raises: SDKException: if backup level specified is not correct if response is empty if response is not success """ backup_level = backup_level.lower() if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']: raise SDKException('Subclient', '103') if not inc_with_data: return super(PostgresSubclient, self).backup(backup_level) request_json = self._backup_request_json( backup_level, inc_with_data) flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CREATE_TASK'], request_json ) return self._process_backup_response(flag, response) def restore_postgres_server( self, database_list=None, dest_client_name=None, dest_instance_name=None, copy_precedence=None, from_time=None, to_time=None, clone_env=False, clone_options=None, media_agent=None, table_level_restore=False, staging_path=None, no_of_streams=None, volume_level_restore=False, redirect_enabled=False, redirect_path=None, **kwargs): """ Method to restore the Postgres server Args: database_list (List) -- List of databases dest_client_name (str) -- Destination Client name dest_instance_name (str) -- Destination Instance name copy_precedence (int) -- Copy precedence associted with storage from_time (str) -- time to retore the contents after format: YYYY-MM-DD HH:MM:SS default: None to_time (str) -- time to retore the contents before format: YYYY-MM-DD HH:MM:SS default: None clone_env (bool) -- boolean to specify whether the database should be cloned or not default: False clone_options (dict) -- clone restore options passed in a dict default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "/opt/PostgreSQL/9.6/lib", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "postgres", "binaryDirectory": "/opt/PostgreSQL/9.6/bin" } media_agent (str) -- media agent name default: None table_level_restore (bool) -- boolean to specify if the restore operation is table level default: False staging_path (str) -- staging path location for table level restore default: None no_of_streams (int) -- number of streams to be used by volume level restore default: None volume_level_restore (bool) -- volume level restore flag default: False redirect_enabled (bool) -- boolean to specify if redirect restore is enabled default: False redirect_path (str) -- Path specified in advanced restore options in order to perform redirect restore default: None revert (bool) -- boolean to specify whether to do a hardware revert in restore default: False Returns: object -- Job containing restore details """ backup_set_object = self._backupset_object instance_object = backup_set_object._instance_object if dest_client_name is None: dest_client_name = instance_object._agent_object._client_object.client_name if dest_instance_name is None: dest_instance_name = instance_object.instance_name backupset_name = backup_set_object.backupset_name if backupset_name.lower() == "fsbasedbackupset": backupset_flag = True if database_list is None: database_list = ["/data"] else: backupset_flag = False instance_object._restore_association = self._subClientEntity return instance_object.restore_in_place( database_list, dest_client_name, dest_instance_name, backupset_name, backupset_flag, copy_precedence=copy_precedence, from_time=from_time, to_time=to_time, clone_env=clone_env, clone_options=clone_options, media_agent=media_agent, table_level_restore=table_level_restore, staging_path=staging_path, no_of_streams=no_of_streams, volume_level_restore=volume_level_restore, redirect_enabled=redirect_enabled, redirect_path=redirect_path, revert=kwargs.get("revert", False))
Ancestors
Instance variables
var collect_object_list
-
Returns the collect object list flag of the subclient.
Returns
(bool) – True if flag is set False if the flag is not set
Expand source code Browse git
@property def collect_object_list(self): """Returns the collect object list flag of the subclient. Returns: (bool) -- True if flag is set False if the flag is not set """ return self._subclient_properties.get( 'postgreSQLSubclientProp', {}).get( 'collectObjectListDuringBackup', False)
var content
-
returns list of databases which are part of subclient content
Expand source code Browse git
@property def content(self): """returns list of databases which are part of subclient content""" self._content = None if not self.is_default_subclient: if 'content' in self._subclient_properties: self._content = self._subclient_properties['content'] if not self._content is None: database_list = list() for database in self._content: if database.get('postgreSQLContent'): if database['postgreSQLContent'].get('databaseName'): database_list.append(database[ 'postgreSQLContent']['databaseName'].lstrip("/")) return database_list
Methods
def backup(self, backup_level='Differential', inc_with_data=False)
-
Runs a backup job for the subclient of the level specified.
Args
backup_level (str) – level of backup the user wish to run Full / Incremental / Differential / Synthetic_full
default: Differential
inc_with_data (bool) – flag to determine if the incremental backup includes data or not
Returns
object - instance of the Job class for this backup job
Raises
SDKException: if backup level specified is not correct
if response is empty if response is not success
Expand source code Browse git
def backup( self, backup_level="Differential", inc_with_data=False): """Runs a backup job for the subclient of the level specified. Args: backup_level (str) -- level of backup the user wish to run Full / Incremental / Differential / Synthetic_full default: Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not Returns: object - instance of the Job class for this backup job Raises: SDKException: if backup level specified is not correct if response is empty if response is not success """ backup_level = backup_level.lower() if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']: raise SDKException('Subclient', '103') if not inc_with_data: return super(PostgresSubclient, self).backup(backup_level) request_json = self._backup_request_json( backup_level, inc_with_data) flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CREATE_TASK'], request_json ) return self._process_backup_response(flag, response)
def restore_postgres_server(self, database_list=None, dest_client_name=None, dest_instance_name=None, copy_precedence=None, from_time=None, to_time=None, clone_env=False, clone_options=None, media_agent=None, table_level_restore=False, staging_path=None, no_of_streams=None, volume_level_restore=False, redirect_enabled=False, redirect_path=None, **kwargs)
-
Method to restore the Postgres server
Args: database_list (List) -- List of databases dest_client_name (str) -- Destination Client name dest_instance_name (str) -- Destination Instance name copy_precedence (int) -- Copy precedence associted with storage from_time (str) -- time to retore the contents after format: YYYY-MM-DD HH:MM:SS default: None to_time (str) -- time to retore the contents before format: YYYY-MM-DD HH:MM:SS default: None clone_env (bool) -- boolean to specify whether the database should be cloned or not default: False clone_options (dict) -- clone restore options passed in a dict default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "/opt/PostgreSQL/9.6/lib", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "postgres", "binaryDirectory": "/opt/PostgreSQL/9.6/bin" } media_agent (str) -- media agent name default: None table_level_restore (bool) -- boolean to specify if the restore operation is table level default: False staging_path (str) -- staging path location for table level restore default: None no_of_streams (int) -- number of streams to be used by volume level restore default: None volume_level_restore (bool) -- volume level restore flag default: False redirect_enabled (bool) -- boolean to specify if redirect restore is enabled default: False redirect_path (str) -- Path specified in advanced restore options in order to perform redirect restore default: None revert (bool) -- boolean to specify whether to do a hardware revert in restore default: False Returns: object -- Job containing restore details
Expand source code Browse git
def restore_postgres_server( self, database_list=None, dest_client_name=None, dest_instance_name=None, copy_precedence=None, from_time=None, to_time=None, clone_env=False, clone_options=None, media_agent=None, table_level_restore=False, staging_path=None, no_of_streams=None, volume_level_restore=False, redirect_enabled=False, redirect_path=None, **kwargs): """ Method to restore the Postgres server Args: database_list (List) -- List of databases dest_client_name (str) -- Destination Client name dest_instance_name (str) -- Destination Instance name copy_precedence (int) -- Copy precedence associted with storage from_time (str) -- time to retore the contents after format: YYYY-MM-DD HH:MM:SS default: None to_time (str) -- time to retore the contents before format: YYYY-MM-DD HH:MM:SS default: None clone_env (bool) -- boolean to specify whether the database should be cloned or not default: False clone_options (dict) -- clone restore options passed in a dict default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "/opt/PostgreSQL/9.6/lib", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "postgres", "binaryDirectory": "/opt/PostgreSQL/9.6/bin" } media_agent (str) -- media agent name default: None table_level_restore (bool) -- boolean to specify if the restore operation is table level default: False staging_path (str) -- staging path location for table level restore default: None no_of_streams (int) -- number of streams to be used by volume level restore default: None volume_level_restore (bool) -- volume level restore flag default: False redirect_enabled (bool) -- boolean to specify if redirect restore is enabled default: False redirect_path (str) -- Path specified in advanced restore options in order to perform redirect restore default: None revert (bool) -- boolean to specify whether to do a hardware revert in restore default: False Returns: object -- Job containing restore details """ backup_set_object = self._backupset_object instance_object = backup_set_object._instance_object if dest_client_name is None: dest_client_name = instance_object._agent_object._client_object.client_name if dest_instance_name is None: dest_instance_name = instance_object.instance_name backupset_name = backup_set_object.backupset_name if backupset_name.lower() == "fsbasedbackupset": backupset_flag = True if database_list is None: database_list = ["/data"] else: backupset_flag = False instance_object._restore_association = self._subClientEntity return instance_object.restore_in_place( database_list, dest_client_name, dest_instance_name, backupset_name, backupset_flag, copy_precedence=copy_precedence, from_time=from_time, to_time=to_time, clone_env=clone_env, clone_options=clone_options, media_agent=media_agent, table_level_restore=table_level_restore, staging_path=staging_path, no_of_streams=no_of_streams, volume_level_restore=volume_level_restore, redirect_enabled=redirect_enabled, redirect_path=redirect_path, revert=kwargs.get("revert", False))
def set_content(self, database_list, operation_type='OVERWRITE')
-
Adds/Updates/Deletes the postgresql subclient contents
Args
database_list (list) – list of databases to be added to the subclient content
operation_type (str) – Content operation to be performed
Accepted Values: ADD -- Adds the database list to existing content OVERWRITE -- Replaces the content with given databases DELETE -- Deletes the database from the content
Raises
SDKException: if database list is not a list
if operation type is not accepted value if the database list is empty if the operation is performed on default subclient
Expand source code Browse git
def set_content(self, database_list, operation_type="OVERWRITE"): """ Adds/Updates/Deletes the postgresql subclient contents Args: database_list (list) -- list of databases to be added to the subclient content operation_type (str) -- Content operation to be performed Accepted Values: ADD -- Adds the database list to existing content OVERWRITE -- Replaces the content with given databases DELETE -- Deletes the database from the content Raises: SDKException: if database list is not a list if operation type is not accepted value if the database list is empty if the operation is performed on default subclient """ if not isinstance(database_list, list): raise SDKException('Subclient', '101') if operation_type.lower() not in ['add', 'overwrite', 'delete']: raise SDKException('Subclient', '102', 'Operation type not supported') if not database_list: raise SDKException('Subclient', '102', 'Cannot set empty content to a subclient') if self.is_default_subclient: raise SDKException('Subclient', '102', 'Cannot set content to the default subclient') operation_map = { 'add' : 2, 'overwrite': 1, 'delete': 3 } properties = self._subclient_properties content_list = [] for database in database_list: content_dict = { 'postgreSQLContent': { 'databaseName': f'{database}' } } content_list.append(content_dict) properties['contentOperationType'] = operation_map[operation_type.lower()] properties['content'] = content_list self.update_properties(properties)
Inherited members
DatabaseSubclient
:allow_multiple_readers
browse
data_readers
deduplication_options
description
disable_backup
disable_intelli_snap
display_name
enable_backup
enable_backup_at_time
enable_intelli_snap
enable_trueup
enable_trueup_days
encryption_flag
exclude_from_sla
find
find_latest_job
get_ma_associated_storagepolicy
is_backup_enabled
is_blocklevel_backup_enabled
is_default_subclient
is_intelli_snap_enabled
is_on_demand_subclient
is_trueup_enabled
last_backup_time
list_media
log_backup_storage_policy
name
network_agent
next_backup_time
plan
properties
read_buffer_size
refresh
restore_in_place
restore_out_of_place
set_backup_nodes
set_proxy_for_snap
snapshot_engine_name
software_compression
storage_ma
storage_ma_id
storage_policy
subclient_guid
subclient_id
subclient_name
unset_proxy_for_snap
update_properties