Module cvpysdk.subclients.exchange.exchange_database_subclient
Module for doing operations on an Exchange Database Agent.
This module has operations that are applicable at the Agent level for Exchange Database.
Exchangedatabasesubclient
_get_subclient_properties() – get the properties of the subclient, and initialize the basic properties
_get_subclient_properties_json() – gets all the subclient properties of the Exchange Database subclient
_set_content – Sets the content for Exchange Database subclient
restore_in_place() – runs in-place restore for the subclient
restore_out_of_place – runs out of place restore for the subclient
set_subclient_properties() – sets the properties of this sub client
create_recovery_point() – create recovery point for a database
get_session() – Get the session ids for a database
get_mailbox_tags() – Get the mailboxtags for mailboxes
run_restore_messages() – run livebrowse restore
Attributes
**content** -- returns the content of the Exchange Database 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.
# --------------------------------------------------------------------------
"""Module for doing operations on an Exchange Database Agent.
This module has operations that are applicable at the Agent level for Exchange Database.
ExchangeDatabaseSubclient:
_get_subclient_properties() -- get the properties of the subclient, and initialize
the basic properties
_get_subclient_properties_json() -- gets all the subclient properties of the
Exchange Database subclient
_set_content -- Sets the content for Exchange Database subclient
restore_in_place() -- runs in-place restore for the subclient
restore_out_of_place -- runs out of place restore for the subclient
set_subclient_properties() -- sets the properties of this sub client
create_recovery_point() -- create recovery point for a database
get_session() -- Get the session ids for a database
get_mailbox_tags() -- Get the mailboxtags for mailboxes
run_restore_messages() -- run livebrowse restore
Attributes
----------
**content** -- returns the content of the Exchange Database subclient
"""
from __future__ import unicode_literals
from ...subclient import Subclient
from ...exception import SDKException
from ...job import Job
class ExchangeDatabaseSubclient(Subclient):
"""Derived class from the Subclient Base class,
to perform operations specific to an Exchange Database Subclient."""
def _get_subclient_properties(self):
"""Gets the subclient related properties of Exchange Database subclient.."""
super(ExchangeDatabaseSubclient, self)._get_subclient_properties()
self._content = self._subclient_properties.get('content', [])
self._exchange_db_subclient_prop = self._subclient_properties.get(
'exchangeDBSubClientProp', {}
)
def _get_subclient_properties_json(self):
"""Returns the JSON with the properties for the Subclient, that can be used for a POST
request to update the properties of the Subclient.
Returns:
dict - all subclient properties put inside a dict
"""
subclient_json = {
"subClientProperties": {
"subClientEntity": self._subClientEntity,
"exchangeDBSubClientProp": self._exchange_db_subclient_prop,
"content": self._content,
"commonProperties": self._commonProperties,
"contentOperationType": 1
}
}
return subclient_json
@property
def content(self):
"""Gets the appropriate content from the Subclient relevant to the user.
Returns:
list - list of content added to the subclient
"""
return self._content
@content.setter
def content(self, subclient_content):
"""Update the content of the subclient with the content list given by the user.
Args:
subclient_content (list) -- list of the content to add to the subclient
Raises:
SDKException:
if specified input is not a list
if failed to update subclient content
"""
if isinstance(subclient_content, list) and subclient_content != []:
self._set_content(content=subclient_content)
else:
raise SDKException(
'Subclient', '102', 'Subclient content should be a list value and not empty'
)
def _set_content(self, content):
"""Sets the subclient content
Args:
content (list) -- list of subclient content
"""
temp = []
for item in content:
temp.append(
{
"exchangeDBContent": {
"databaseName": item,
"forceFull": True
}
}
)
self._set_subclient_properties("_content", temp)
def set_exchangedb_subclient_prop(self, key, value):
"""Sets the exchange DB sublcient properties
Args:
key (str) -- property to be changed
value (obj) -- value to be set
"""
self._set_subclient_properties(
"_exchange_db_subclient_prop['{0}']".format(str(key)),
value
)
def _restore_json(self, **kwargs):
"""Returns the JSON request to pass to the API as per the options selected by the user.
Args:
kwargs (dict) -- dict of options need to be set for restore
Returns:
dict - JSON request to pass to the API
"""
self._instance_object._restore_association = self._subClientEntity
restore_json = self._instance_object._restore_json(**kwargs)
exchange_options = {
"exchangeRestoreLogOption": 0,
"exchangeVersion": {
"name": "",
"version": 15
}
}
restore_json['taskInfo']['subTasks'][0]['options']['restoreOptions']['exchangeOption'] = exchange_options
return restore_json
def restore_in_place(self, paths, client=None):
"""
Run inplace restore for Exchange database subclient
Args:
paths (list) -- list of path used for inplace restore
client (object) -- object of client class
Returns:
object - Job class object for restore job
"""
if client is None:
client = self._client_object
restore_json = self._restore_json(paths=paths, client=client)
return self._process_restore_response(restore_json)
def restore_out_of_place(self, client, paths):
"""
Run out of place restore for Exchange database subclient
Args:
client (str) -- destination client on which the restore should run
paths (list) -- list of path used for out of place restore
Returns:
object - Job class object for restore job
"""
restore_json = self._restore_json(paths=paths, client=client)
return self._process_restore_response(restore_json)
def create_recovery_point(self, db_name, media_agent, expiry_days=5):
""""
Run a create recovery point job on a backup
Args:
db_name (str) -- database name
media_agent (str) -- media agent name to create recovery point on
expiry_days (int) -- no of days to keep the recovery point
default : 5
Returns:
job - Job id of recovery point
"""
options = {
'path': db_name,
'media_agent': media_agent.split('.')[0],
'subclientId': int(self.subclient_id)
}
options = self._backupset_object._prepare_browse_options(options)
request_json = self._backupset_object._prepare_browse_json(options)
request_json['advOptions'] = {
"advConfig": {
"applicationMining": {
"browseInitReq": {
"appMinType": 2,
"bCreateRecoveryPoint": True,
"expireDays": expiry_days
},
"isApplicationMiningReq": True,
"appType": int(self._agent_object._agent_id)
}
}
}
flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json)
if flag:
if response and response.json():
response = response.json()
response = response['browseResponses'][0]
job_id = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['recoveryPointJobID']
job = Job(self._commcell_object, job_id)
job.wait_for_completion()
return job
else:
raise SDKException('Response', '102')
else:
raise SDKException('Response', '101')
def get_session(self, path, media_agent, edb_paths, recovery_point_ids):
""""
Get session ids for a recovery point
Args:
path (str) -- database name
media_agent (str) -- media agent name to create recovery point on
edb_paths (dict) -- edb paths with job Ids
ex: {97297: '\\\\SPVM\\sc_4701_job_97296_1563312295\\1563312295\\Microsoft Information
Store\\AUTODBx_spvm.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_spvm.VAYU.COMMVAULT.COM.edb
', 97298: '\\\\MSE-2013\\sc_4701_job_97296_1563312333\\1563312333\\Microsoft Information St
ore\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM.edb'}
recovery_point_ids (dict) -- ids of recovery point jobs
ex: {97297: 834, 97298: 835}
Returns:
Sessionids - dictionary of sessionids
"""
session_ids = {}
for jobid, edb_path in edb_paths.items():
options = {
'path': path,
'media_agent': media_agent.split('.')[0],
'subclientId': int(self.subclient_id)
}
options = self._backupset_object._prepare_browse_options(options)
request_json = self._backupset_object._prepare_browse_json(options)
request_json['session'] = {
}
request_json['advOptions'] = {
"advConfig": {
"applicationMining": {
"isApplicationMiningReq": True,
"appType": int(self._agent_object._agent_id),
"browseInitReq": {
"bCreateRecoveryPoint": False,
"recoveryPointID": recovery_point_ids[jobid],
"appMinType": 0,
"edbPath": edb_path
}
}
}
}
flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json)
if flag:
if response and response.json() :
response = response.json()
response = response['browseResponses'][0]
edb = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['edbPath']
session_ids[edb] = response['session']['sessionId']
else:
raise SDKException('Response', '102')
else:
raise SDKException('Response', '101')
return session_ids
def get_mailbox_tags(self, path, media_agent, edb_paths, session_ids):
""""
Get the mailbox tags for a recovery point
Args:
path (str) -- database name
media_agent (str) -- media agent name to create recovery point on
edb_paths (dict) -- edb paths with job Ids
session_ids (dict) -- sessionIDs of recovery point jobs
Returns:
mailboxTags - dictionary of mailboxes and their tags
"""
mailbox_tags = {}
for jobid, edb_path in edb_paths.items():
options = {
'path': path,
'media_agent': media_agent.split('.')[0],
'subclientId': int(self.subclient_id)
}
options = self._backupset_object._prepare_browse_options(options)
request_json = self._backupset_object._prepare_browse_json(options)
request_json['session'] = {
'sessionId': session_ids[edb_path]
}
request_json['advOptions'] = {
"advConfig": {
"applicationMining": {
"isApplicationMiningReq": True,
"appType": int(self._agent_object._agent_id),
"browseReq": {
"exMiningReq": {
"miningLevel": 0,
"edbPath": edb_path
}
}
}
}
}
flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json)
if flag:
if response and response.json():
response = response.json()
response = response['browseResponses'][0]
response = response['browseResult']['dataResultSet'][0]
db_name = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['edbPath']
mailbox_tags[db_name] = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['mailboxTag']
else:
raise SDKException('Response', '102')
else:
raise SDKException('Response', '101')
return mailbox_tags
def run_restore_messages(self, path, media_agent, oop_path,
session_id, edb_path, mailbox_tags):
""""
Run a create recovery point job on a backup
Args:
path (str) -- database name
media_agent (str) -- media agent name to create recovery point on
oop_path (str) -- path for pst restore
edb_path (dict) -- edb paths with job Ids
session_id (dict) -- sessionIDs of recovery point jobs
mailbox_tags (dict) -- mailbox tags for which restore has to run
Returns:
Response
"""
options = {
'path': path,
'media_agent': media_agent,
'subclientId': int(self.subclient_id)
}
options = self._backupset_object._prepare_browse_options(options)
request_json = self._backupset_object._prepare_browse_json(options)
request_json['session'] = {
'sessionId': session_id
}
request_json['advOptions'] = {
"advConfig": {
"applicationMining": {
"appType": int(self._agent_object._agent_id),
"isApplicationMiningReq": True,
"browseReq": {
"exRestoreReq": {
"restoreType": 0,
"edbPath": edb_path,
"mailboxTag": mailbox_tags,
"destLocation": oop_path,
"restoreDestType": 0
}
},
}
}
}
flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json)
if flag:
if response and response.json():
response = response.json()
return response
else:
raise SDKException('Response', '102')
else:
raise SDKException('Response', '101')
Classes
class ExchangeDatabaseSubclient (backupset_object, subclient_name, subclient_id=None)
-
Derived class from the Subclient Base class, to perform operations specific to an Exchange Database Subclient.
Initialise the Subclient object.
Args
backupset_object (object) – instance of the Backupset class
subclient_name (str) – name of the subclient
subclient_id (str) – id of the subclient default: None
Returns
object - instance of the Subclient class
Expand source code Browse git
class ExchangeDatabaseSubclient(Subclient): """Derived class from the Subclient Base class, to perform operations specific to an Exchange Database Subclient.""" def _get_subclient_properties(self): """Gets the subclient related properties of Exchange Database subclient..""" super(ExchangeDatabaseSubclient, self)._get_subclient_properties() self._content = self._subclient_properties.get('content', []) self._exchange_db_subclient_prop = self._subclient_properties.get( 'exchangeDBSubClientProp', {} ) def _get_subclient_properties_json(self): """Returns the JSON with the properties for the Subclient, that can be used for a POST request to update the properties of the Subclient. Returns: dict - all subclient properties put inside a dict """ subclient_json = { "subClientProperties": { "subClientEntity": self._subClientEntity, "exchangeDBSubClientProp": self._exchange_db_subclient_prop, "content": self._content, "commonProperties": self._commonProperties, "contentOperationType": 1 } } return subclient_json @property def content(self): """Gets the appropriate content from the Subclient relevant to the user. Returns: list - list of content added to the subclient """ return self._content @content.setter def content(self, subclient_content): """Update the content of the subclient with the content list given by the user. Args: subclient_content (list) -- list of the content to add to the subclient Raises: SDKException: if specified input is not a list if failed to update subclient content """ if isinstance(subclient_content, list) and subclient_content != []: self._set_content(content=subclient_content) else: raise SDKException( 'Subclient', '102', 'Subclient content should be a list value and not empty' ) def _set_content(self, content): """Sets the subclient content Args: content (list) -- list of subclient content """ temp = [] for item in content: temp.append( { "exchangeDBContent": { "databaseName": item, "forceFull": True } } ) self._set_subclient_properties("_content", temp) def set_exchangedb_subclient_prop(self, key, value): """Sets the exchange DB sublcient properties Args: key (str) -- property to be changed value (obj) -- value to be set """ self._set_subclient_properties( "_exchange_db_subclient_prop['{0}']".format(str(key)), value ) def _restore_json(self, **kwargs): """Returns the JSON request to pass to the API as per the options selected by the user. Args: kwargs (dict) -- dict of options need to be set for restore Returns: dict - JSON request to pass to the API """ self._instance_object._restore_association = self._subClientEntity restore_json = self._instance_object._restore_json(**kwargs) exchange_options = { "exchangeRestoreLogOption": 0, "exchangeVersion": { "name": "", "version": 15 } } restore_json['taskInfo']['subTasks'][0]['options']['restoreOptions']['exchangeOption'] = exchange_options return restore_json def restore_in_place(self, paths, client=None): """ Run inplace restore for Exchange database subclient Args: paths (list) -- list of path used for inplace restore client (object) -- object of client class Returns: object - Job class object for restore job """ if client is None: client = self._client_object restore_json = self._restore_json(paths=paths, client=client) return self._process_restore_response(restore_json) def restore_out_of_place(self, client, paths): """ Run out of place restore for Exchange database subclient Args: client (str) -- destination client on which the restore should run paths (list) -- list of path used for out of place restore Returns: object - Job class object for restore job """ restore_json = self._restore_json(paths=paths, client=client) return self._process_restore_response(restore_json) def create_recovery_point(self, db_name, media_agent, expiry_days=5): """" Run a create recovery point job on a backup Args: db_name (str) -- database name media_agent (str) -- media agent name to create recovery point on expiry_days (int) -- no of days to keep the recovery point default : 5 Returns: job - Job id of recovery point """ options = { 'path': db_name, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['advOptions'] = { "advConfig": { "applicationMining": { "browseInitReq": { "appMinType": 2, "bCreateRecoveryPoint": True, "expireDays": expiry_days }, "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id) } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() response = response['browseResponses'][0] job_id = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['recoveryPointJobID'] job = Job(self._commcell_object, job_id) job.wait_for_completion() return job else: raise SDKException('Response', '102') else: raise SDKException('Response', '101') def get_session(self, path, media_agent, edb_paths, recovery_point_ids): """" Get session ids for a recovery point Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids ex: {97297: '\\\\SPVM\\sc_4701_job_97296_1563312295\\1563312295\\Microsoft Information Store\\AUTODBx_spvm.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_spvm.VAYU.COMMVAULT.COM.edb ', 97298: '\\\\MSE-2013\\sc_4701_job_97296_1563312333\\1563312333\\Microsoft Information St ore\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM.edb'} recovery_point_ids (dict) -- ids of recovery point jobs ex: {97297: 834, 97298: 835} Returns: Sessionids - dictionary of sessionids """ session_ids = {} for jobid, edb_path in edb_paths.items(): options = { 'path': path, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { } request_json['advOptions'] = { "advConfig": { "applicationMining": { "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id), "browseInitReq": { "bCreateRecoveryPoint": False, "recoveryPointID": recovery_point_ids[jobid], "appMinType": 0, "edbPath": edb_path } } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json() : response = response.json() response = response['browseResponses'][0] edb = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['edbPath'] session_ids[edb] = response['session']['sessionId'] else: raise SDKException('Response', '102') else: raise SDKException('Response', '101') return session_ids def get_mailbox_tags(self, path, media_agent, edb_paths, session_ids): """" Get the mailbox tags for a recovery point Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids session_ids (dict) -- sessionIDs of recovery point jobs Returns: mailboxTags - dictionary of mailboxes and their tags """ mailbox_tags = {} for jobid, edb_path in edb_paths.items(): options = { 'path': path, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { 'sessionId': session_ids[edb_path] } request_json['advOptions'] = { "advConfig": { "applicationMining": { "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id), "browseReq": { "exMiningReq": { "miningLevel": 0, "edbPath": edb_path } } } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() response = response['browseResponses'][0] response = response['browseResult']['dataResultSet'][0] db_name = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['edbPath'] mailbox_tags[db_name] = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['mailboxTag'] else: raise SDKException('Response', '102') else: raise SDKException('Response', '101') return mailbox_tags def run_restore_messages(self, path, media_agent, oop_path, session_id, edb_path, mailbox_tags): """" Run a create recovery point job on a backup Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on oop_path (str) -- path for pst restore edb_path (dict) -- edb paths with job Ids session_id (dict) -- sessionIDs of recovery point jobs mailbox_tags (dict) -- mailbox tags for which restore has to run Returns: Response """ options = { 'path': path, 'media_agent': media_agent, 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { 'sessionId': session_id } request_json['advOptions'] = { "advConfig": { "applicationMining": { "appType": int(self._agent_object._agent_id), "isApplicationMiningReq": True, "browseReq": { "exRestoreReq": { "restoreType": 0, "edbPath": edb_path, "mailboxTag": mailbox_tags, "destLocation": oop_path, "restoreDestType": 0 } }, } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() return response else: raise SDKException('Response', '102') else: raise SDKException('Response', '101')
Ancestors
Instance variables
var content
-
Gets the appropriate content from the Subclient relevant to the user.
Returns
list - list of content added to the subclient
Expand source code Browse git
@property def content(self): """Gets the appropriate content from the Subclient relevant to the user. Returns: list - list of content added to the subclient """ return self._content
Methods
def create_recovery_point(self, db_name, media_agent, expiry_days=5)
-
" Run a create recovery point job on a backup
Args: db_name (str) -- database name media_agent (str) -- media agent name to create recovery point on expiry_days (int) -- no of days to keep the recovery point default : 5 Returns: job - Job id of recovery point
Expand source code Browse git
def create_recovery_point(self, db_name, media_agent, expiry_days=5): """" Run a create recovery point job on a backup Args: db_name (str) -- database name media_agent (str) -- media agent name to create recovery point on expiry_days (int) -- no of days to keep the recovery point default : 5 Returns: job - Job id of recovery point """ options = { 'path': db_name, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['advOptions'] = { "advConfig": { "applicationMining": { "browseInitReq": { "appMinType": 2, "bCreateRecoveryPoint": True, "expireDays": expiry_days }, "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id) } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() response = response['browseResponses'][0] job_id = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['recoveryPointJobID'] job = Job(self._commcell_object, job_id) job.wait_for_completion() return job else: raise SDKException('Response', '102') else: raise SDKException('Response', '101')
-
" Get the mailbox tags for a recovery point
Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids session_ids (dict) -- sessionIDs of recovery point jobs Returns: mailboxTags - dictionary of mailboxes and their tags
Expand source code Browse git
def get_mailbox_tags(self, path, media_agent, edb_paths, session_ids): """" Get the mailbox tags for a recovery point Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids session_ids (dict) -- sessionIDs of recovery point jobs Returns: mailboxTags - dictionary of mailboxes and their tags """ mailbox_tags = {} for jobid, edb_path in edb_paths.items(): options = { 'path': path, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { 'sessionId': session_ids[edb_path] } request_json['advOptions'] = { "advConfig": { "applicationMining": { "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id), "browseReq": { "exMiningReq": { "miningLevel": 0, "edbPath": edb_path } } } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() response = response['browseResponses'][0] response = response['browseResult']['dataResultSet'][0] db_name = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['edbPath'] mailbox_tags[db_name] = response['advancedData']['advConfig']['applicationMining']['browseResp']['exMiningRsp']['mailboxTag'] else: raise SDKException('Response', '102') else: raise SDKException('Response', '101') return mailbox_tags
def get_session(self, path, media_agent, edb_paths, recovery_point_ids)
-
" Get session ids for a recovery point
Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids ex: {97297: '\\SPVM\sc_4701_job_97296_1563312295\1563312295\Microsoft Information Store\AUTODBx_spvm.VAYU.COMMVAULT.COM\EDBFILES\AUTODBx_spvm.VAYU.COMMVAULT.COM.edb ', 97298: '\\MSE-2013\sc_4701_job_97296_1563312333\1563312333\Microsoft Information St ore\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM\EDBFILES\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM.edb'} recovery_point_ids (dict) -- ids of recovery point jobs ex: {97297: 834, 97298: 835} Returns: Sessionids - dictionary of sessionids
Expand source code Browse git
def get_session(self, path, media_agent, edb_paths, recovery_point_ids): """" Get session ids for a recovery point Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on edb_paths (dict) -- edb paths with job Ids ex: {97297: '\\\\SPVM\\sc_4701_job_97296_1563312295\\1563312295\\Microsoft Information Store\\AUTODBx_spvm.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_spvm.VAYU.COMMVAULT.COM.edb ', 97298: '\\\\MSE-2013\\sc_4701_job_97296_1563312333\\1563312333\\Microsoft Information St ore\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM\\EDBFILES\\AUTODBx_MSE-2013.VAYU.COMMVAULT.COM.edb'} recovery_point_ids (dict) -- ids of recovery point jobs ex: {97297: 834, 97298: 835} Returns: Sessionids - dictionary of sessionids """ session_ids = {} for jobid, edb_path in edb_paths.items(): options = { 'path': path, 'media_agent': media_agent.split('.')[0], 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { } request_json['advOptions'] = { "advConfig": { "applicationMining": { "isApplicationMiningReq": True, "appType": int(self._agent_object._agent_id), "browseInitReq": { "bCreateRecoveryPoint": False, "recoveryPointID": recovery_point_ids[jobid], "appMinType": 0, "edbPath": edb_path } } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json() : response = response.json() response = response['browseResponses'][0] edb = response['browseResult']['advConfig']['applicationMining']['browseInitResp']['edbPath'] session_ids[edb] = response['session']['sessionId'] else: raise SDKException('Response', '102') else: raise SDKException('Response', '101') return session_ids
def restore_in_place(self, paths, client=None)
-
Run inplace restore for Exchange database subclient
Args: paths (list) – list of path used for inplace restore
client (object) -- object of client class
Returns
object - Job class object for restore job
Expand source code Browse git
def restore_in_place(self, paths, client=None): """ Run inplace restore for Exchange database subclient Args: paths (list) -- list of path used for inplace restore client (object) -- object of client class Returns: object - Job class object for restore job """ if client is None: client = self._client_object restore_json = self._restore_json(paths=paths, client=client) return self._process_restore_response(restore_json)
def restore_out_of_place(self, client, paths)
-
Run out of place restore for Exchange database subclient Args: client (str) – destination client on which the restore should run
paths (list) -- list of path used for out of place restore
Returns: object - Job class object for restore job
Expand source code Browse git
def restore_out_of_place(self, client, paths): """ Run out of place restore for Exchange database subclient Args: client (str) -- destination client on which the restore should run paths (list) -- list of path used for out of place restore Returns: object - Job class object for restore job """ restore_json = self._restore_json(paths=paths, client=client) return self._process_restore_response(restore_json)
def run_restore_messages(self, path, media_agent, oop_path, session_id, edb_path, mailbox_tags)
-
" Run a create recovery point job on a backup
Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on oop_path (str) -- path for pst restore edb_path (dict) -- edb paths with job Ids session_id (dict) -- sessionIDs of recovery point jobs mailbox_tags (dict) -- mailbox tags for which restore has to run Returns: Response
Expand source code Browse git
def run_restore_messages(self, path, media_agent, oop_path, session_id, edb_path, mailbox_tags): """" Run a create recovery point job on a backup Args: path (str) -- database name media_agent (str) -- media agent name to create recovery point on oop_path (str) -- path for pst restore edb_path (dict) -- edb paths with job Ids session_id (dict) -- sessionIDs of recovery point jobs mailbox_tags (dict) -- mailbox tags for which restore has to run Returns: Response """ options = { 'path': path, 'media_agent': media_agent, 'subclientId': int(self.subclient_id) } options = self._backupset_object._prepare_browse_options(options) request_json = self._backupset_object._prepare_browse_json(options) request_json['session'] = { 'sessionId': session_id } request_json['advOptions'] = { "advConfig": { "applicationMining": { "appType": int(self._agent_object._agent_id), "isApplicationMiningReq": True, "browseReq": { "exRestoreReq": { "restoreType": 0, "edbPath": edb_path, "mailboxTag": mailbox_tags, "destLocation": oop_path, "restoreDestType": 0 } }, } } } flag, response = self._cvpysdk_object.make_request('POST', self._BROWSE, request_json) if flag: if response and response.json(): response = response.json() return response else: raise SDKException('Response', '102') else: raise SDKException('Response', '101')
def set_exchangedb_subclient_prop(self, key, value)
-
Sets the exchange DB sublcient properties
Args
key (str) – property to be changed
value (obj) – value to be set
Expand source code Browse git
def set_exchangedb_subclient_prop(self, key, value): """Sets the exchange DB sublcient properties Args: key (str) -- property to be changed value (obj) -- value to be set """ self._set_subclient_properties( "_exchange_db_subclient_prop['{0}']".format(str(key)), value )
Inherited members
Subclient
:allow_multiple_readers
backup
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
name
network_agent
next_backup_time
plan
properties
read_buffer_size
refresh
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