Module cvpysdk.subclients.adsubclient
File for Ad agent sublcient replated operation
Class
ADSubclient :
_get_subclient_properties() -- Method to get subclinet properites
_get_subclient_properties_json -- Method to generate subclinet properties in json format
content -- Properties of AD objects in subclient
compare_id -- Method returns AD compare id
trigger_compare_job -- Method to trigger AD compare job
checkcompare_result_generated -- Method to check AD compare report generated
generate_compare_report -- Method to generate AD compare report
restore_job -- Method to do AD point in time restore
Adsubclient
content() – method to get AD agent subclient content
Function:
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 Ad agent sublcient replated operation
Class:
ADSubclient :
_get_subclient_properties() -- Method to get subclinet properites
_get_subclient_properties_json -- Method to generate subclinet properties in json format
content -- Properties of AD objects in subclient
compare_id -- Method returns AD compare id
trigger_compare_job -- Method to trigger AD compare job
checkcompare_result_generated -- Method to check AD compare report generated
generate_compare_report -- Method to generate AD compare report
restore_job -- Method to do AD point in time restore
ADSubclient:
content() -- method to get AD agent subclient content
Function:
"""
from __future__ import unicode_literals
from ..exception import SDKException
from ..subclient import Subclient
import time
class ADSubclient(Subclient):
"""Class for AD agent related subclient """
def _get_subclient_properties(self):
"""Gets the subclient related properties of File System subclient.
"""
super()._get_subclient_properties()
if 'impersonateUser' in self._subclient_properties:
self._impersonateUser = self._subclient_properties['impersonateUser']
if 'content' in self._subclient_properties:
self._content = self._subclient_properties['content']
def _get_subclient_properties_json(self):
"""get the all subclient related properties of this subclient.
Returns:
dict - all subclient properties put inside a dict
"""
subclient_json = {
"subClientProperties":
{
"impersonateUser": self._impersonateUser,
"proxyClient": self._proxyClient,
"subClientEntity": self._subClientEntity,
"content": self._content,
"commonProperties": self._commonProperties,
"contentOperationType": 1
}
}
return subclient_json
@property
def content(self):
""" Get AD agent subclient content"""
contents = []
if "content" in self._subclient_properties:
subclient_content = self._subclient_properties['content']
else:
subclient_content = []
if len(subclient_content) > 0:
for entry in subclient_content:
if len(entry['path'].split(',')) > 1:
contents.append(",".join(entry['path'].split(',')[1:]))
else:
raise SDKException('Subclient', "101",
"subclient content is not valid")
else:
raise SDKException('Subclient', '101',
"subclient content return empty result")
return contents
def cv_contents(self, contents, entrypoint=None):
"""Commvault subclient content convert to AD format
Args:
content (list) subclient content
entrypoint (string) ad object entry point
Return:
(list) ad format content
Exception:
None
"""
content_ad = []
for content in contents:
contententry = ",".join(list(reversed(content.split(","))))
if entrypoint is not None:
shortdn = contententry.split(",{0}".format(entrypoint))[0]
else:
shortdn = None
content_ad.append((contententry, shortdn))
return content_ad
def compare_id(self,left_set_time,right_set_time,
source_item,comparison_name):
"""
Generate Commvault AD Compare Comparison id
Args:
left_set_time (int) End Time of the first backup for comparison
right_set_time (int) End Time of the second backup for comparison
source_item (string) sourceItem for comparison
comparison_name(string) name of the comparison
Return:
(int) Comparison ID
Exception:
Response was not a success
"""
client_id=int(self._client_object.client_id)
subclient_id=int(self.subclient_id)
payload = {
"adCompareOptions": {"adCompareType": 0, "comparisonName": comparison_name,
"subClientId": (subclient_id),
"appTypeId": 41, "clientId": (client_id),
"nodeClientId": (client_id),
"leftSetTime": (left_set_time),
"rightSetTime": (right_set_time), "status": 0,
"adComparisonJobType": 0,
"selectedItems": {"sourceItem": [source_item]},
"includeUnchangedItems": False,
"excludeFrequentlyChanged": True}}
generate_comparison_id = self._services['ADCOMPAREID'] % (subclient_id)
flag, response = self._cvpysdk_object.make_request(
method= 'POST',url= generate_comparison_id,payload= payload
)
if flag:
response_dict=response.json()
comp_id = response_dict['adCompareDetails'][0]['comparisonId']
else:
raise SDKException('Response', '101', self._commcell_object._update_response_(response.text))
return comp_id
def trigger_compare_job(self,left_set_time,
right_set_time,
display_name,client_name,
comp_id,source_item,comparison_name):
"""
Triggers Commvault AD compare job
Args:
left_set_time (int) End Time of the first backup for comparison
right_set_time(int) End Time of the second backup for comparison
display_name(str) displayName of the client
client_name(str) name of the client
comp_id(int) the comparison id for AD compare
source_item(str) sourceItem for comparison
comparison_name(str) name of the comparison
Return:
None
Exception:
Response was not a success
"""
client_id = int(self._client_object.client_id)
backupset_id=int(self._backupset_object._get_backupset_id())
subclient_id = int(self.subclient_id)
trigger_compare_job=self._services['CREATE_TASK']
request_time=int(time.time())
payload = {"taskInfo": {"associations": [
{"subclientId": (subclient_id), "displayName":
display_name, "clientId": (client_id),
"applicationId": 41, "clientName":
client_name, "backupsetId": (backupset_id),
"_type_": "SUBCLIENT_ENTITY"}],
"task": {"taskType": 1}, "subTasks": [
{"subTask": {"subTaskType": 1, "operationType": 4025},
"options": {"backupOpts": {},
"commonOpts": {"notifyUserOnJobCompletion": False},
"adComparisonOption": {"adCompareType": 0,
"comparisonName": comparison_name,
"subClientId": (subclient_id),
"appTypeId": 41,
"clientId": (client_id),
"nodeClientId": (client_id),
"leftSetTime": left_set_time,
"rightSetTime": right_set_time,
"status": 0,
"adComparisonJobType": 0,
"selectedItems": {"sourceItem": [source_item]},
"includeUnchangedItems": False,
"excludeFrequentlyChanged": True,
"comparisonId": (comp_id),
"requestTime":request_time ,
"selectionHash": "D51A0DDBBFF582EEFA23A750DB90F1A46F6E90CE"}}}]}}
flag, response = self._cvpysdk_object.make_request(method='POST',
url=trigger_compare_job,
payload=payload)
if not flag:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
def checkcompare_result_generated(self,comp_id):
"""
Function to check AD comparison result generated and returns comparison cache path
Args:
comp_id(int): comparison id of AD compare operation
Return:
(string) comparisonCachePath
Exception:
Response was not a success
"""
compare_result = self._services['ADCOMPARESTATUSCHECK'] % (comp_id)
while True:
flag, response = self._cvpysdk_object.make_request(method='GET',
url=compare_result)
if flag:
response_dict = response.json()
error_message = response_dict['adCompareDetails'][0]['errorMessage']
status = response_dict['adCompareDetails'][0]['status']
comparison_cache_path = response_dict['adCompareDetails'][0]['sqlLiteDBCachePath']
if (error_message == "" and status == 0 and comparison_cache_path != ""):
return comparison_cache_path
if error_message != "":
raise SDKException('Response', '101',
self._commcell_objectj._update_response_(response.text))
time.sleep(30)
else:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
def generate_compare_report(self,comp_id,comparison_cache_path,op_type=2):
"""
Return AD Compare report
Args:
comp_id (int) the comparison id generate
comparison_cache_path (str) local directory where we write the comparison file
Return:
(json) AD Compare Report
Exception:
Response was not a success
"""
client_id = int(self._client_object.client_id)
subclient_id = int(self.subclient_id)
ad_comp_url = self._services['ADCOMPAREVIEWRESULTS']
payload = {"isEnterprise": True, "discoverySentTypes": [24],
"subclientDetails": {"subclientId": (subclient_id), "appTypeId": 41,
"clientId": (client_id)},
"adComparisonBrowseReq": {"pageNumber": 0, "comparisonId": comp_id,
"opType": op_type, "browseItemId": 0,
"pageSize": 15, "comparisonCachePath":
comparison_cache_path,
"searches":[{"masks":["2","1","0"],"searchType":2}]}}
flag, response = self._cvpysdk_object.make_request(method='POST', url=ad_comp_url,
payload=payload)
if not flag:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
return response.json()
def restore_job(self,display_name,client_name,subclient_name,to_time,restore_path):
"""
Triggers AD restore job and waits for its completion
Args:
display_name(str) displayName of the client
client_name(str) name of the client
subclient_name(str) name of the subclient
to_time(int) time from where to restore
restore_path(str) restore path
Return:
None
Exception:
Response was not a success
"""
client_id = int(self._client_object.client_id)
subclient_id = int(self.subclient_id)
backupset_id = int(self._backupset_object._get_backupset_id())
client_guid=self._client_object.client_guid
commcell_id=int(self._commcell_object.commcell_id)
instance_id=int(self._instance_object.instance_id)
payload={"taskInfo":{"associations":[{"subclientId":subclient_id,
"displayName":display_name,
"clientId":client_id,
"entityInfo":{"companyId":0,"companyName":""},
"instanceName":"DefaultInstanceName",
"applicationId":41,
"clientName":client_name,
"backupsetId":backupset_id,
"instanceId":instance_id,
"clientGUID":client_guid,
"subclientName":subclient_name,
"backupsetName":"defaultBackupSet","_type_":7}],
"task":{"taskType":1,"initiatedFrom":1},
"subTasks":[{"subTask":
{"subTaskType":3,"operationType":1001},
"options":{"commonOpts":{
"notifyUserOnJobCompletion":False,
"jobMetadata":[{"selectedItems":
[{"itemName":"","itemType":""}],
"jobOptionItems":[]}]},
"restoreOptions":{"browseOption":
{"commCellId":commcell_id,
"noImage":False,"useExactIndex":False,
"listMedia":False,"backupset":
{"backupsetId":backupset_id,
"clientId":client_id},
"timeRange":{"toTime":to_time},
"mediaOption":{"copyPrecedence":
{"copyPrecedenceApplicable":False}}},
"destination":{"inPlace":True,"destClient":
{"clientId":client_id,"clientName":client_name}},
"fileOption":{"sourceItem":[restore_path]},
"activeDirectoryRstOption":{},
"commonOptions":{"detectRegularExpression":True,
"preserveLevel":1,"restoreACLs":True}}}}]}}
trigger_response=self._services['CREATE_TASK']
flag, response =self._cvpysdk_object.make_request(method='POST', url=trigger_response,
payload=payload)
if not flag:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
if not response:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
response = response.json()
if "errorCode" in response:
raise SDKException('Response', '101',
self._commcell_object._update_response_(response.text))
# get restore job and wait for its completion
job_id = response["jobIds"][0]
job = self._commcell_object.job_controller.get(job_id)
job.wait_for_completion()
Classes
class ADSubclient (backupset_object, subclient_name, subclient_id=None)
-
Class for AD agent related 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 ADSubclient(Subclient): """Class for AD agent related subclient """ def _get_subclient_properties(self): """Gets the subclient related properties of File System subclient. """ super()._get_subclient_properties() if 'impersonateUser' in self._subclient_properties: self._impersonateUser = self._subclient_properties['impersonateUser'] if 'content' in self._subclient_properties: self._content = self._subclient_properties['content'] def _get_subclient_properties_json(self): """get the all subclient related properties of this subclient. Returns: dict - all subclient properties put inside a dict """ subclient_json = { "subClientProperties": { "impersonateUser": self._impersonateUser, "proxyClient": self._proxyClient, "subClientEntity": self._subClientEntity, "content": self._content, "commonProperties": self._commonProperties, "contentOperationType": 1 } } return subclient_json @property def content(self): """ Get AD agent subclient content""" contents = [] if "content" in self._subclient_properties: subclient_content = self._subclient_properties['content'] else: subclient_content = [] if len(subclient_content) > 0: for entry in subclient_content: if len(entry['path'].split(',')) > 1: contents.append(",".join(entry['path'].split(',')[1:])) else: raise SDKException('Subclient', "101", "subclient content is not valid") else: raise SDKException('Subclient', '101', "subclient content return empty result") return contents def cv_contents(self, contents, entrypoint=None): """Commvault subclient content convert to AD format Args: content (list) subclient content entrypoint (string) ad object entry point Return: (list) ad format content Exception: None """ content_ad = [] for content in contents: contententry = ",".join(list(reversed(content.split(",")))) if entrypoint is not None: shortdn = contententry.split(",{0}".format(entrypoint))[0] else: shortdn = None content_ad.append((contententry, shortdn)) return content_ad def compare_id(self,left_set_time,right_set_time, source_item,comparison_name): """ Generate Commvault AD Compare Comparison id Args: left_set_time (int) End Time of the first backup for comparison right_set_time (int) End Time of the second backup for comparison source_item (string) sourceItem for comparison comparison_name(string) name of the comparison Return: (int) Comparison ID Exception: Response was not a success """ client_id=int(self._client_object.client_id) subclient_id=int(self.subclient_id) payload = { "adCompareOptions": {"adCompareType": 0, "comparisonName": comparison_name, "subClientId": (subclient_id), "appTypeId": 41, "clientId": (client_id), "nodeClientId": (client_id), "leftSetTime": (left_set_time), "rightSetTime": (right_set_time), "status": 0, "adComparisonJobType": 0, "selectedItems": {"sourceItem": [source_item]}, "includeUnchangedItems": False, "excludeFrequentlyChanged": True}} generate_comparison_id = self._services['ADCOMPAREID'] % (subclient_id) flag, response = self._cvpysdk_object.make_request( method= 'POST',url= generate_comparison_id,payload= payload ) if flag: response_dict=response.json() comp_id = response_dict['adCompareDetails'][0]['comparisonId'] else: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) return comp_id def trigger_compare_job(self,left_set_time, right_set_time, display_name,client_name, comp_id,source_item,comparison_name): """ Triggers Commvault AD compare job Args: left_set_time (int) End Time of the first backup for comparison right_set_time(int) End Time of the second backup for comparison display_name(str) displayName of the client client_name(str) name of the client comp_id(int) the comparison id for AD compare source_item(str) sourceItem for comparison comparison_name(str) name of the comparison Return: None Exception: Response was not a success """ client_id = int(self._client_object.client_id) backupset_id=int(self._backupset_object._get_backupset_id()) subclient_id = int(self.subclient_id) trigger_compare_job=self._services['CREATE_TASK'] request_time=int(time.time()) payload = {"taskInfo": {"associations": [ {"subclientId": (subclient_id), "displayName": display_name, "clientId": (client_id), "applicationId": 41, "clientName": client_name, "backupsetId": (backupset_id), "_type_": "SUBCLIENT_ENTITY"}], "task": {"taskType": 1}, "subTasks": [ {"subTask": {"subTaskType": 1, "operationType": 4025}, "options": {"backupOpts": {}, "commonOpts": {"notifyUserOnJobCompletion": False}, "adComparisonOption": {"adCompareType": 0, "comparisonName": comparison_name, "subClientId": (subclient_id), "appTypeId": 41, "clientId": (client_id), "nodeClientId": (client_id), "leftSetTime": left_set_time, "rightSetTime": right_set_time, "status": 0, "adComparisonJobType": 0, "selectedItems": {"sourceItem": [source_item]}, "includeUnchangedItems": False, "excludeFrequentlyChanged": True, "comparisonId": (comp_id), "requestTime":request_time , "selectionHash": "D51A0DDBBFF582EEFA23A750DB90F1A46F6E90CE"}}}]}} flag, response = self._cvpysdk_object.make_request(method='POST', url=trigger_compare_job, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) def checkcompare_result_generated(self,comp_id): """ Function to check AD comparison result generated and returns comparison cache path Args: comp_id(int): comparison id of AD compare operation Return: (string) comparisonCachePath Exception: Response was not a success """ compare_result = self._services['ADCOMPARESTATUSCHECK'] % (comp_id) while True: flag, response = self._cvpysdk_object.make_request(method='GET', url=compare_result) if flag: response_dict = response.json() error_message = response_dict['adCompareDetails'][0]['errorMessage'] status = response_dict['adCompareDetails'][0]['status'] comparison_cache_path = response_dict['adCompareDetails'][0]['sqlLiteDBCachePath'] if (error_message == "" and status == 0 and comparison_cache_path != ""): return comparison_cache_path if error_message != "": raise SDKException('Response', '101', self._commcell_objectj._update_response_(response.text)) time.sleep(30) else: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) def generate_compare_report(self,comp_id,comparison_cache_path,op_type=2): """ Return AD Compare report Args: comp_id (int) the comparison id generate comparison_cache_path (str) local directory where we write the comparison file Return: (json) AD Compare Report Exception: Response was not a success """ client_id = int(self._client_object.client_id) subclient_id = int(self.subclient_id) ad_comp_url = self._services['ADCOMPAREVIEWRESULTS'] payload = {"isEnterprise": True, "discoverySentTypes": [24], "subclientDetails": {"subclientId": (subclient_id), "appTypeId": 41, "clientId": (client_id)}, "adComparisonBrowseReq": {"pageNumber": 0, "comparisonId": comp_id, "opType": op_type, "browseItemId": 0, "pageSize": 15, "comparisonCachePath": comparison_cache_path, "searches":[{"masks":["2","1","0"],"searchType":2}]}} flag, response = self._cvpysdk_object.make_request(method='POST', url=ad_comp_url, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) return response.json() def restore_job(self,display_name,client_name,subclient_name,to_time,restore_path): """ Triggers AD restore job and waits for its completion Args: display_name(str) displayName of the client client_name(str) name of the client subclient_name(str) name of the subclient to_time(int) time from where to restore restore_path(str) restore path Return: None Exception: Response was not a success """ client_id = int(self._client_object.client_id) subclient_id = int(self.subclient_id) backupset_id = int(self._backupset_object._get_backupset_id()) client_guid=self._client_object.client_guid commcell_id=int(self._commcell_object.commcell_id) instance_id=int(self._instance_object.instance_id) payload={"taskInfo":{"associations":[{"subclientId":subclient_id, "displayName":display_name, "clientId":client_id, "entityInfo":{"companyId":0,"companyName":""}, "instanceName":"DefaultInstanceName", "applicationId":41, "clientName":client_name, "backupsetId":backupset_id, "instanceId":instance_id, "clientGUID":client_guid, "subclientName":subclient_name, "backupsetName":"defaultBackupSet","_type_":7}], "task":{"taskType":1,"initiatedFrom":1}, "subTasks":[{"subTask": {"subTaskType":3,"operationType":1001}, "options":{"commonOpts":{ "notifyUserOnJobCompletion":False, "jobMetadata":[{"selectedItems": [{"itemName":"","itemType":""}], "jobOptionItems":[]}]}, "restoreOptions":{"browseOption": {"commCellId":commcell_id, "noImage":False,"useExactIndex":False, "listMedia":False,"backupset": {"backupsetId":backupset_id, "clientId":client_id}, "timeRange":{"toTime":to_time}, "mediaOption":{"copyPrecedence": {"copyPrecedenceApplicable":False}}}, "destination":{"inPlace":True,"destClient": {"clientId":client_id,"clientName":client_name}}, "fileOption":{"sourceItem":[restore_path]}, "activeDirectoryRstOption":{}, "commonOptions":{"detectRegularExpression":True, "preserveLevel":1,"restoreACLs":True}}}}]}} trigger_response=self._services['CREATE_TASK'] flag, response =self._cvpysdk_object.make_request(method='POST', url=trigger_response, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) if not response: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) response = response.json() if "errorCode" in response: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) # get restore job and wait for its completion job_id = response["jobIds"][0] job = self._commcell_object.job_controller.get(job_id) job.wait_for_completion()
Ancestors
Instance variables
var content
-
Get AD agent subclient content
Expand source code Browse git
@property def content(self): """ Get AD agent subclient content""" contents = [] if "content" in self._subclient_properties: subclient_content = self._subclient_properties['content'] else: subclient_content = [] if len(subclient_content) > 0: for entry in subclient_content: if len(entry['path'].split(',')) > 1: contents.append(",".join(entry['path'].split(',')[1:])) else: raise SDKException('Subclient', "101", "subclient content is not valid") else: raise SDKException('Subclient', '101', "subclient content return empty result") return contents
Methods
def checkcompare_result_generated(self, comp_id)
-
Function to check AD comparison result generated and returns comparison cache path
Args
comp_id(int): comparison id of AD compare operation
Return
(string) comparisonCachePath
Exception
Response was not a success
Expand source code Browse git
def checkcompare_result_generated(self,comp_id): """ Function to check AD comparison result generated and returns comparison cache path Args: comp_id(int): comparison id of AD compare operation Return: (string) comparisonCachePath Exception: Response was not a success """ compare_result = self._services['ADCOMPARESTATUSCHECK'] % (comp_id) while True: flag, response = self._cvpysdk_object.make_request(method='GET', url=compare_result) if flag: response_dict = response.json() error_message = response_dict['adCompareDetails'][0]['errorMessage'] status = response_dict['adCompareDetails'][0]['status'] comparison_cache_path = response_dict['adCompareDetails'][0]['sqlLiteDBCachePath'] if (error_message == "" and status == 0 and comparison_cache_path != ""): return comparison_cache_path if error_message != "": raise SDKException('Response', '101', self._commcell_objectj._update_response_(response.text)) time.sleep(30) else: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text))
def compare_id(self, left_set_time, right_set_time, source_item, comparison_name)
-
Generate Commvault AD Compare Comparison id
Args
left_set_time (int) End Time of the first backup for comparison right_set_time (int) End Time of the second backup for comparison source_item (string) sourceItem for comparison comparison_name(string) name of the comparison
Return
(int) Comparison ID
Exception
Response was not a success
Expand source code Browse git
def compare_id(self,left_set_time,right_set_time, source_item,comparison_name): """ Generate Commvault AD Compare Comparison id Args: left_set_time (int) End Time of the first backup for comparison right_set_time (int) End Time of the second backup for comparison source_item (string) sourceItem for comparison comparison_name(string) name of the comparison Return: (int) Comparison ID Exception: Response was not a success """ client_id=int(self._client_object.client_id) subclient_id=int(self.subclient_id) payload = { "adCompareOptions": {"adCompareType": 0, "comparisonName": comparison_name, "subClientId": (subclient_id), "appTypeId": 41, "clientId": (client_id), "nodeClientId": (client_id), "leftSetTime": (left_set_time), "rightSetTime": (right_set_time), "status": 0, "adComparisonJobType": 0, "selectedItems": {"sourceItem": [source_item]}, "includeUnchangedItems": False, "excludeFrequentlyChanged": True}} generate_comparison_id = self._services['ADCOMPAREID'] % (subclient_id) flag, response = self._cvpysdk_object.make_request( method= 'POST',url= generate_comparison_id,payload= payload ) if flag: response_dict=response.json() comp_id = response_dict['adCompareDetails'][0]['comparisonId'] else: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) return comp_id
def cv_contents(self, contents, entrypoint=None)
-
Commvault subclient content convert to AD format
Args
content (list) subclient content entrypoint (string) ad object entry point
Return
(list) ad format content
Exception
None
Expand source code Browse git
def cv_contents(self, contents, entrypoint=None): """Commvault subclient content convert to AD format Args: content (list) subclient content entrypoint (string) ad object entry point Return: (list) ad format content Exception: None """ content_ad = [] for content in contents: contententry = ",".join(list(reversed(content.split(",")))) if entrypoint is not None: shortdn = contententry.split(",{0}".format(entrypoint))[0] else: shortdn = None content_ad.append((contententry, shortdn)) return content_ad
def generate_compare_report(self, comp_id, comparison_cache_path, op_type=2)
-
Return AD Compare report Args: comp_id (int) the comparison id generate comparison_cache_path (str) local directory where we write the comparison file Return: (json) AD Compare Report Exception: Response was not a success
Expand source code Browse git
def generate_compare_report(self,comp_id,comparison_cache_path,op_type=2): """ Return AD Compare report Args: comp_id (int) the comparison id generate comparison_cache_path (str) local directory where we write the comparison file Return: (json) AD Compare Report Exception: Response was not a success """ client_id = int(self._client_object.client_id) subclient_id = int(self.subclient_id) ad_comp_url = self._services['ADCOMPAREVIEWRESULTS'] payload = {"isEnterprise": True, "discoverySentTypes": [24], "subclientDetails": {"subclientId": (subclient_id), "appTypeId": 41, "clientId": (client_id)}, "adComparisonBrowseReq": {"pageNumber": 0, "comparisonId": comp_id, "opType": op_type, "browseItemId": 0, "pageSize": 15, "comparisonCachePath": comparison_cache_path, "searches":[{"masks":["2","1","0"],"searchType":2}]}} flag, response = self._cvpysdk_object.make_request(method='POST', url=ad_comp_url, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) return response.json()
def restore_job(self, display_name, client_name, subclient_name, to_time, restore_path)
-
Triggers AD restore job and waits for its completion
Args
display_name(str) displayName of the client client_name(str) name of the client subclient_name(str) name of the subclient to_time(int) time from where to restore restore_path(str) restore path
Return
None
Exception
Response was not a success
Expand source code Browse git
def restore_job(self,display_name,client_name,subclient_name,to_time,restore_path): """ Triggers AD restore job and waits for its completion Args: display_name(str) displayName of the client client_name(str) name of the client subclient_name(str) name of the subclient to_time(int) time from where to restore restore_path(str) restore path Return: None Exception: Response was not a success """ client_id = int(self._client_object.client_id) subclient_id = int(self.subclient_id) backupset_id = int(self._backupset_object._get_backupset_id()) client_guid=self._client_object.client_guid commcell_id=int(self._commcell_object.commcell_id) instance_id=int(self._instance_object.instance_id) payload={"taskInfo":{"associations":[{"subclientId":subclient_id, "displayName":display_name, "clientId":client_id, "entityInfo":{"companyId":0,"companyName":""}, "instanceName":"DefaultInstanceName", "applicationId":41, "clientName":client_name, "backupsetId":backupset_id, "instanceId":instance_id, "clientGUID":client_guid, "subclientName":subclient_name, "backupsetName":"defaultBackupSet","_type_":7}], "task":{"taskType":1,"initiatedFrom":1}, "subTasks":[{"subTask": {"subTaskType":3,"operationType":1001}, "options":{"commonOpts":{ "notifyUserOnJobCompletion":False, "jobMetadata":[{"selectedItems": [{"itemName":"","itemType":""}], "jobOptionItems":[]}]}, "restoreOptions":{"browseOption": {"commCellId":commcell_id, "noImage":False,"useExactIndex":False, "listMedia":False,"backupset": {"backupsetId":backupset_id, "clientId":client_id}, "timeRange":{"toTime":to_time}, "mediaOption":{"copyPrecedence": {"copyPrecedenceApplicable":False}}}, "destination":{"inPlace":True,"destClient": {"clientId":client_id,"clientName":client_name}}, "fileOption":{"sourceItem":[restore_path]}, "activeDirectoryRstOption":{}, "commonOptions":{"detectRegularExpression":True, "preserveLevel":1,"restoreACLs":True}}}}]}} trigger_response=self._services['CREATE_TASK'] flag, response =self._cvpysdk_object.make_request(method='POST', url=trigger_response, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) if not response: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) response = response.json() if "errorCode" in response: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text)) # get restore job and wait for its completion job_id = response["jobIds"][0] job = self._commcell_object.job_controller.get(job_id) job.wait_for_completion()
def trigger_compare_job(self, left_set_time, right_set_time, display_name, client_name, comp_id, source_item, comparison_name)
-
Triggers Commvault AD compare job
Args
left_set_time (int) End Time of the first backup for comparison right_set_time(int) End Time of the second backup for comparison display_name(str) displayName of the client client_name(str) name of the client comp_id(int) the comparison id for AD compare source_item(str) sourceItem for comparison comparison_name(str) name of the comparison
Return
None
Exception
Response was not a success
Expand source code Browse git
def trigger_compare_job(self,left_set_time, right_set_time, display_name,client_name, comp_id,source_item,comparison_name): """ Triggers Commvault AD compare job Args: left_set_time (int) End Time of the first backup for comparison right_set_time(int) End Time of the second backup for comparison display_name(str) displayName of the client client_name(str) name of the client comp_id(int) the comparison id for AD compare source_item(str) sourceItem for comparison comparison_name(str) name of the comparison Return: None Exception: Response was not a success """ client_id = int(self._client_object.client_id) backupset_id=int(self._backupset_object._get_backupset_id()) subclient_id = int(self.subclient_id) trigger_compare_job=self._services['CREATE_TASK'] request_time=int(time.time()) payload = {"taskInfo": {"associations": [ {"subclientId": (subclient_id), "displayName": display_name, "clientId": (client_id), "applicationId": 41, "clientName": client_name, "backupsetId": (backupset_id), "_type_": "SUBCLIENT_ENTITY"}], "task": {"taskType": 1}, "subTasks": [ {"subTask": {"subTaskType": 1, "operationType": 4025}, "options": {"backupOpts": {}, "commonOpts": {"notifyUserOnJobCompletion": False}, "adComparisonOption": {"adCompareType": 0, "comparisonName": comparison_name, "subClientId": (subclient_id), "appTypeId": 41, "clientId": (client_id), "nodeClientId": (client_id), "leftSetTime": left_set_time, "rightSetTime": right_set_time, "status": 0, "adComparisonJobType": 0, "selectedItems": {"sourceItem": [source_item]}, "includeUnchangedItems": False, "excludeFrequentlyChanged": True, "comparisonId": (comp_id), "requestTime":request_time , "selectionHash": "D51A0DDBBFF582EEFA23A750DB90F1A46F6E90CE"}}}]}} flag, response = self._cvpysdk_object.make_request(method='POST', url=trigger_compare_job, payload=payload) if not flag: raise SDKException('Response', '101', self._commcell_object._update_response_(response.text))
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
restore_in_place
restore_out_of_place
run_content_indexing
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