Module cvpysdk.drorchestration.replicationmonitor

Main file for performing failover specific operations.

ReplicationMonitor: Class for representing all the dr orchestration operations from Replication monitor

Replicationmonitor

init(commcell_object, replication_monitor_options) – Initialise object of ReplicationMonitor

repr() – Return the ReplicationMonitor name

testboot() – Call testboot operation

planned_failover() – Call Planned failvoer operation

unplanned_failover() – Call Unplanned Failover operation

failback() – Call failback operation

undo_failover() – Call UndoFailover operation

revert_failover() – Call RevertFailover operation

point_in_time_failover() – Call PointInTimeFailover operation

reverse_replication() – Schedule and call ReverseReplication operation

schedule_reverse_replication() – Schedule ReverseReplication

force_reverse_replication() – Call ReverseReplication operation

validate_dr_orchestration_job(jobId) – Validate DR orchestration job Id

refresh() – Refresh the object properties

internal methods

_get_replication_monitor() – Gets replication monitor

_get_snapshot_list() – Gets snapshot list for the destination client

properties

_replication_Ids() – Returns replication Ids list

replication_monitor_options() – Returns replication monitor options

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.
# --------------------------------------------------------------------------

"""Main file for performing failover specific operations.

ReplicationMonitor: Class for representing all the dr orchestration operations
from Replication monitor


ReplicationMonitor:
    __init__(commcell_object,
            replication_monitor_options)            -- Initialise object of ReplicationMonitor

    __repr__()                                      -- Return the ReplicationMonitor name

    testboot()                                      -- Call testboot operation

    planned_failover()                              -- Call Planned failvoer operation

    unplanned_failover()                            -- Call Unplanned Failover operation

    failback()                                      -- Call failback operation

    undo_failover()                                 -- Call UndoFailover operation

    revert_failover()                               -- Call RevertFailover operation

    point_in_time_failover()                        -- Call PointInTimeFailover operation

    reverse_replication()                           -- Schedule and call ReverseReplication operation

    schedule_reverse_replication()                  -- Schedule ReverseReplication

    force_reverse_replication()                     -- Call ReverseReplication operation

    validate_dr_orchestration_job(jobId)            -- Validate DR orchestration job Id

    refresh()                                       -- Refresh the object properties

    ##### internal methods #####
    _get_replication_monitor()                      -- Gets replication monitor

    _get_snapshot_list()                            -- Gets snapshot list for the destination client

    ##### properties #####
    _replication_Ids()                              -- Returns replication Ids list

    replication_monitor_options()                   -- Returns replication monitor options


"""

from __future__ import absolute_import
from __future__ import unicode_literals

from ..exception import SDKException
from .drorchestrationoperations import DROrchestrationOperations


class ReplicationMonitor(object):
    """Class for performing DR orchestration operations on ReplicationMonitor."""

    def __init__(self, commcell_object, replication_monitor_options):
        """Initialise the ReplicationMonitor object.

            Args:
                commcell_object (object)  --  instance of the Commcell class

                input dict of replication monitor options
                replication_monitor_options (json) -- replication monitor options
                {
                    "VirtualizationClient": "",
                    "approvalRequired": False,
                    "skipDisableNetworkAdapter": False
                    "initiatedFromMonitor": True,
                    "vmName": 'DRVM1'
                }

            Returns:
                object - instance of the ReplicationMonitor class
        """
        ##### local variables of these class ########
        self._commcell_object = commcell_object
        self._replication_monitor_options = replication_monitor_options
        self._services = commcell_object._services

        # create DROrchestrationOperations object
        self._dr_operation = DROrchestrationOperations(commcell_object)

        ##### REST API URLs #####
        self._REPLICATION_MONITOR = self._commcell_object._services['REPLICATION_MONITOR']

        # init local variables
        self._replicationId = None

        self.refresh()

        # set dr orchestration options property
        self._replication_monitor_options['replicationIds'] = self._replication_Ids
        self._dr_operation.dr_orchestration_options = self.replication_monitor_options

    def __repr__(self):
        """String representation of the instance of this class."""
        representation_string = '"ReplicationMonitor: instance for commcell: "{1}"'
        return representation_string.format(
            self._commcell_object.commserv_name)

    @property
    def _replication_Ids(self):
        """ Returns replicationIds of the failover """
        if not self._replicationId:

            vm_name = self.replication_monitor_options.get("vmName", "")
            _rep_Ids = []

            if not vm_name:

                # get the first VM if input vm doesnt exist
                vm = self.replication_monitor[0]
                _rep_Ids.append(vm.get('replicationId', 0))

            else:
                # adds support to a list of VM names
                # for backward compatibility, converts a single string to a list
                if not isinstance(vm_name, list):
                    assert isinstance(vm_name, str)
                    vm_name = [vm_name]

                # makes the entire list lower case
                vm_name = list(map(lambda x : str(x).lower(), vm_name))

                # iterate through all the vms
                for _vm in self.replication_monitor:
                    if str(_vm.get("sourceName")).lower() in vm_name:
                        _rep_Ids.append(_vm.get("replicationId", 0))

            self._replicationId = _rep_Ids

        return self._replicationId

    @property
    def replication_monitor_options(self):
        """Getter replication monitor"""
        return self._replication_monitor_options

    @property
    def replication_monitor(self):
        """Getter replication monitor"""
        return self._replication_monitor

    def refresh(self):
        """Refresh the replication monitor.
        Args:

        Returns:

        Raises:
        """
        self._get_replication_monitor()

    def testboot(self):
        """Performs testboot failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Testboot job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.testboot()

    def planned_failover(self):
        """Performs Planned failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Planned Failover job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.planned_failover()

    def unplanned_failover(self):
        """Performs UnPlanned failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Unplanned Failover job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.unplanned_failover()

    def failback(self):
        """Performs Failback operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """

        return self._dr_operation.failback()

    def undo_failover(self):
        """Performs Undo Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.undo_failover()

    def reverse_replication(self):
        """Schedules and calls Reverse Replication

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.reverse_replication()

    def schedule_reverse_replication(self):
        """Schedules Reverse Replication.

            Args:

            Returns:
                (TaskId) - TaskId of the scheduling reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.schedule_reverse_replication()

    def force_reverse_replication(self):
        """Performs one reverse replication operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.force_reverse_replication()

    def revert_failover(self):
        """Performs Revert Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.revert_failover()

    def point_in_time_failover(self):
        """Performs Revert Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        snapshot_list = self._get_snapshot_list()

        if len(snapshot_list) == 0:
            raise SDKException("ReplicationMonitor", "101",
                               "No snapshot is found.")

        # fetch the first snapshot to run
        return self._dr_operation.point_in_time_failover(
            snapshot_list[0]["timestamp"],
            self._replication_monitor_options['replicationIds'][0])

    def validate_dr_orchestration_job(self, jobId):
        """ Validates DR orchestration job of jobId
            Args:
                JobId: Job Id of the DR orchestration job

            Returns:
                bool - boolean that represents whether the DR orchestration job finished successfully or not

            Raises:
                SDKException:
                    if proper inputs are not provided
                    If failover phase failed at any stage
        """
        return self._dr_operation.validate_dr_orchestration_job(jobId)


#################### private functions #####################

    def _get_replication_monitor(self):
        """ Gets replication monitor options
            Args:

            Returns: Gets the Replication monitor options dict

            Raises:
                SDKException:
                    if response is empty

                    if response is not success

        """
        flag, response = self._commcell_object._cvpysdk_object.make_request(
            'GET', self._REPLICATION_MONITOR)

        if flag:
            if response.json():
                self._replication_monitor = response.json()['siteInfo']
            else:
                raise SDKException('Response', '102')
        else:
            response_string = self._commcell_object._update_response_(
                response.text)
            raise SDKException('Response', '101', response_string)

    def _get_snapshot_list(self):
        """ Gets snapshot list for the destination client

            Args:

            Returns:
                list of dict: list of snapshot information
        """
        vm_name = self.replication_monitor_options.get("vmName", "")
        vm = None

        # parses vm information from the replication monitor
        if not vm_name:
            vm = self.replication_monitor[0]
        else:
            for _vm in self.replication_monitor:
                if str(_vm.get("sourceName")).lower() == str(vm_name).lower():
                    vm = _vm
                    break

        # we only need the information about destination guid
        destination_guid = vm["destinationGuid"]
        instance_id = vm["parentSubclient"]["instanceId"]

        return self._dr_operation.get_snapshot_list(destination_guid, instance_id)

Classes

class ReplicationMonitor (commcell_object, replication_monitor_options)

Class for performing DR orchestration operations on ReplicationMonitor.

Initialise the ReplicationMonitor object.

Args

commcell_object (object) – instance of the Commcell class

input dict of replication monitor options replication_monitor_options (json) – replication monitor options { "VirtualizationClient": "", "approvalRequired": False, "skipDisableNetworkAdapter": False "initiatedFromMonitor": True, "vmName": 'DRVM1' }

Returns

object - instance of the ReplicationMonitor class

Expand source code Browse git
class ReplicationMonitor(object):
    """Class for performing DR orchestration operations on ReplicationMonitor."""

    def __init__(self, commcell_object, replication_monitor_options):
        """Initialise the ReplicationMonitor object.

            Args:
                commcell_object (object)  --  instance of the Commcell class

                input dict of replication monitor options
                replication_monitor_options (json) -- replication monitor options
                {
                    "VirtualizationClient": "",
                    "approvalRequired": False,
                    "skipDisableNetworkAdapter": False
                    "initiatedFromMonitor": True,
                    "vmName": 'DRVM1'
                }

            Returns:
                object - instance of the ReplicationMonitor class
        """
        ##### local variables of these class ########
        self._commcell_object = commcell_object
        self._replication_monitor_options = replication_monitor_options
        self._services = commcell_object._services

        # create DROrchestrationOperations object
        self._dr_operation = DROrchestrationOperations(commcell_object)

        ##### REST API URLs #####
        self._REPLICATION_MONITOR = self._commcell_object._services['REPLICATION_MONITOR']

        # init local variables
        self._replicationId = None

        self.refresh()

        # set dr orchestration options property
        self._replication_monitor_options['replicationIds'] = self._replication_Ids
        self._dr_operation.dr_orchestration_options = self.replication_monitor_options

    def __repr__(self):
        """String representation of the instance of this class."""
        representation_string = '"ReplicationMonitor: instance for commcell: "{1}"'
        return representation_string.format(
            self._commcell_object.commserv_name)

    @property
    def _replication_Ids(self):
        """ Returns replicationIds of the failover """
        if not self._replicationId:

            vm_name = self.replication_monitor_options.get("vmName", "")
            _rep_Ids = []

            if not vm_name:

                # get the first VM if input vm doesnt exist
                vm = self.replication_monitor[0]
                _rep_Ids.append(vm.get('replicationId', 0))

            else:
                # adds support to a list of VM names
                # for backward compatibility, converts a single string to a list
                if not isinstance(vm_name, list):
                    assert isinstance(vm_name, str)
                    vm_name = [vm_name]

                # makes the entire list lower case
                vm_name = list(map(lambda x : str(x).lower(), vm_name))

                # iterate through all the vms
                for _vm in self.replication_monitor:
                    if str(_vm.get("sourceName")).lower() in vm_name:
                        _rep_Ids.append(_vm.get("replicationId", 0))

            self._replicationId = _rep_Ids

        return self._replicationId

    @property
    def replication_monitor_options(self):
        """Getter replication monitor"""
        return self._replication_monitor_options

    @property
    def replication_monitor(self):
        """Getter replication monitor"""
        return self._replication_monitor

    def refresh(self):
        """Refresh the replication monitor.
        Args:

        Returns:

        Raises:
        """
        self._get_replication_monitor()

    def testboot(self):
        """Performs testboot failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Testboot job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.testboot()

    def planned_failover(self):
        """Performs Planned failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Planned Failover job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.planned_failover()

    def unplanned_failover(self):
        """Performs UnPlanned failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the Unplanned Failover job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.unplanned_failover()

    def failback(self):
        """Performs Failback operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """

        return self._dr_operation.failback()

    def undo_failover(self):
        """Performs Undo Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.undo_failover()

    def reverse_replication(self):
        """Schedules and calls Reverse Replication

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.reverse_replication()

    def schedule_reverse_replication(self):
        """Schedules Reverse Replication.

            Args:

            Returns:
                (TaskId) - TaskId of the scheduling reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.schedule_reverse_replication()

    def force_reverse_replication(self):
        """Performs one reverse replication operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.force_reverse_replication()

    def revert_failover(self):
        """Performs Revert Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        return self._dr_operation.revert_failover()

    def point_in_time_failover(self):
        """Performs Revert Failover operation.

            Args:

            Returns:
                (JobId, TaskId) - JobId and taskId of the failback job triggered

            Raises:
                SDKException:
                    if proper inputs are not provided
        """
        snapshot_list = self._get_snapshot_list()

        if len(snapshot_list) == 0:
            raise SDKException("ReplicationMonitor", "101",
                               "No snapshot is found.")

        # fetch the first snapshot to run
        return self._dr_operation.point_in_time_failover(
            snapshot_list[0]["timestamp"],
            self._replication_monitor_options['replicationIds'][0])

    def validate_dr_orchestration_job(self, jobId):
        """ Validates DR orchestration job of jobId
            Args:
                JobId: Job Id of the DR orchestration job

            Returns:
                bool - boolean that represents whether the DR orchestration job finished successfully or not

            Raises:
                SDKException:
                    if proper inputs are not provided
                    If failover phase failed at any stage
        """
        return self._dr_operation.validate_dr_orchestration_job(jobId)


#################### private functions #####################

    def _get_replication_monitor(self):
        """ Gets replication monitor options
            Args:

            Returns: Gets the Replication monitor options dict

            Raises:
                SDKException:
                    if response is empty

                    if response is not success

        """
        flag, response = self._commcell_object._cvpysdk_object.make_request(
            'GET', self._REPLICATION_MONITOR)

        if flag:
            if response.json():
                self._replication_monitor = response.json()['siteInfo']
            else:
                raise SDKException('Response', '102')
        else:
            response_string = self._commcell_object._update_response_(
                response.text)
            raise SDKException('Response', '101', response_string)

    def _get_snapshot_list(self):
        """ Gets snapshot list for the destination client

            Args:

            Returns:
                list of dict: list of snapshot information
        """
        vm_name = self.replication_monitor_options.get("vmName", "")
        vm = None

        # parses vm information from the replication monitor
        if not vm_name:
            vm = self.replication_monitor[0]
        else:
            for _vm in self.replication_monitor:
                if str(_vm.get("sourceName")).lower() == str(vm_name).lower():
                    vm = _vm
                    break

        # we only need the information about destination guid
        destination_guid = vm["destinationGuid"]
        instance_id = vm["parentSubclient"]["instanceId"]

        return self._dr_operation.get_snapshot_list(destination_guid, instance_id)

Instance variables

var replication_monitor

Getter replication monitor

Expand source code Browse git
@property
def replication_monitor(self):
    """Getter replication monitor"""
    return self._replication_monitor
var replication_monitor_options

Getter replication monitor

Expand source code Browse git
@property
def replication_monitor_options(self):
    """Getter replication monitor"""
    return self._replication_monitor_options

Methods

def failback(self)

Performs Failback operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the failback job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def failback(self):
    """Performs Failback operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the failback job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """

    return self._dr_operation.failback()
def force_reverse_replication(self)

Performs one reverse replication operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the reverse replication job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def force_reverse_replication(self):
    """Performs one reverse replication operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.force_reverse_replication()
def planned_failover(self)

Performs Planned failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the Planned Failover job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def planned_failover(self):
    """Performs Planned failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the Planned Failover job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.planned_failover()
def point_in_time_failover(self)

Performs Revert Failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the failback job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def point_in_time_failover(self):
    """Performs Revert Failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the failback job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    snapshot_list = self._get_snapshot_list()

    if len(snapshot_list) == 0:
        raise SDKException("ReplicationMonitor", "101",
                           "No snapshot is found.")

    # fetch the first snapshot to run
    return self._dr_operation.point_in_time_failover(
        snapshot_list[0]["timestamp"],
        self._replication_monitor_options['replicationIds'][0])
def refresh(self)

Refresh the replication monitor. Args:

Returns:

Raises:

Expand source code Browse git
def refresh(self):
    """Refresh the replication monitor.
    Args:

    Returns:

    Raises:
    """
    self._get_replication_monitor()
def reverse_replication(self)

Schedules and calls Reverse Replication

Args:

Returns

(JobId, TaskId) - JobId and taskId of the reverse replication job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def reverse_replication(self):
    """Schedules and calls Reverse Replication

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the reverse replication job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.reverse_replication()
def revert_failover(self)

Performs Revert Failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the failback job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def revert_failover(self):
    """Performs Revert Failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the failback job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.revert_failover()
def schedule_reverse_replication(self)

Schedules Reverse Replication.

Args:

Returns

(TaskId) - TaskId of the scheduling reverse replication job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def schedule_reverse_replication(self):
    """Schedules Reverse Replication.

        Args:

        Returns:
            (TaskId) - TaskId of the scheduling reverse replication job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.schedule_reverse_replication()
def testboot(self)

Performs testboot failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the Testboot job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def testboot(self):
    """Performs testboot failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the Testboot job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.testboot()
def undo_failover(self)

Performs Undo Failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the failback job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def undo_failover(self):
    """Performs Undo Failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the failback job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.undo_failover()
def unplanned_failover(self)

Performs UnPlanned failover operation.

Args:

Returns

(JobId, TaskId) - JobId and taskId of the Unplanned Failover job triggered

Raises

SDKException: if proper inputs are not provided

Expand source code Browse git
def unplanned_failover(self):
    """Performs UnPlanned failover operation.

        Args:

        Returns:
            (JobId, TaskId) - JobId and taskId of the Unplanned Failover job triggered

        Raises:
            SDKException:
                if proper inputs are not provided
    """
    return self._dr_operation.unplanned_failover()
def validate_dr_orchestration_job(self, jobId)

Validates DR orchestration job of jobId

Args

JobId
Job Id of the DR orchestration job

Returns

bool - boolean that represents whether the DR orchestration job finished successfully or not

Raises

SDKException: if proper inputs are not provided If failover phase failed at any stage

Expand source code Browse git
def validate_dr_orchestration_job(self, jobId):
    """ Validates DR orchestration job of jobId
        Args:
            JobId: Job Id of the DR orchestration job

        Returns:
            bool - boolean that represents whether the DR orchestration job finished successfully or not

        Raises:
            SDKException:
                if proper inputs are not provided
                If failover phase failed at any stage
    """
    return self._dr_operation.validate_dr_orchestration_job(jobId)