Module cvpysdk.instances.mysqlinstance

File for operating on a MYSQL Instance.

MYSQLInstance is the only class defined in this file.

MYSQLInstance: Derived class from Instance Base class, representing an MYSQL instance, and to perform operations on that instance

MYSQLInstance:

_get_instance_properties()      -- method to get the properties of the instance

_restore_json()                 -- returns the apppropriate JSON request to pass for
Restore In-Place

restore_in_place()              -- Restores the mysql data/log files specified in the
input paths list to the same location

_restore_browse_option_json()   -- setter for  browse option  property in restore

_restore_common_options_json()  -- setter for common options property in restore

_restore_destination_json()     -- setter for destination options property in restore

_restore_fileoption_json()      -- setter for file option property in restore

_restore_admin_option_json()    -- setter for admin option property in restore

_restore_mysql_option_json()    -- setter for MySQL restore option property in restore

MYSQLInstance instance Attributes:

**port**                            -- Returns the MySQL Server Port number

**mysql_username**                  -- Returns the MySQL Server username

**nt_username**                     -- Returns the MySQL Server nt username

**config_file**                     -- Returns the MySQL Server Config File location

**binary_directory**                -- Returns the MySQL Server Binary File location

**version**                         -- Returns the MySQL Server version number

**log_data_directory**              -- Returns the MySQL Server log data directory

**log_backup_sp_details**           -- Returns the MySQL Server Log backup SP details

**command_line_sp_details**         -- Returns the MySQL Server commandline SP details

**autodiscovery_enabled**           -- Returns the MySQL Server auto discovery enabled flag

**xtrabackup_bin_path**             -- Returns the MySQL Server xtrabackup bin path

**is_xtrabackup_enabled**           -- Returns the MySQL Server xtrabackup enabled flag

**proxy_options**                   -- Returns the MySQL Server proxy options

**mysql_enterprise_backup_binary_path** --  Returns the MySQL Enterprise backup binary path
details

**no_lock_status**                  --  Returns the No Lock check box status for MySQL Instance

**ssl_enabled**                     --  Returns(boolean) True/False based on SSL status
Expand source code Browse git
# -*- coding: utf-8 -*-

# --------------------------------------------------------------------------
# Copyright Commvault Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# --------------------------------------------------------------------------

"""
File for operating on a MYSQL Instance.

MYSQLInstance is the only class defined in this file.

MYSQLInstance: Derived class from Instance Base class, representing an
                MYSQL instance, and to perform operations on that instance

MYSQLInstance:
==============

    _get_instance_properties()      -- method to get the properties of the instance

    _restore_json()                 -- returns the apppropriate JSON request to pass for
    Restore In-Place

    restore_in_place()              -- Restores the mysql data/log files specified in the
    input paths list to the same location

    _restore_browse_option_json()   -- setter for  browse option  property in restore

    _restore_common_options_json()  -- setter for common options property in restore

    _restore_destination_json()     -- setter for destination options property in restore

    _restore_fileoption_json()      -- setter for file option property in restore

    _restore_admin_option_json()    -- setter for admin option property in restore

    _restore_mysql_option_json()    -- setter for MySQL restore option property in restore


MYSQLInstance instance Attributes:
==================================

    **port**                            -- Returns the MySQL Server Port number

    **mysql_username**                  -- Returns the MySQL Server username

    **nt_username**                     -- Returns the MySQL Server nt username

    **config_file**                     -- Returns the MySQL Server Config File location

    **binary_directory**                -- Returns the MySQL Server Binary File location

    **version**                         -- Returns the MySQL Server version number

    **log_data_directory**              -- Returns the MySQL Server log data directory

    **log_backup_sp_details**           -- Returns the MySQL Server Log backup SP details

    **command_line_sp_details**         -- Returns the MySQL Server commandline SP details

    **autodiscovery_enabled**           -- Returns the MySQL Server auto discovery enabled flag

    **xtrabackup_bin_path**             -- Returns the MySQL Server xtrabackup bin path

    **is_xtrabackup_enabled**           -- Returns the MySQL Server xtrabackup enabled flag

    **proxy_options**                   -- Returns the MySQL Server proxy options

    **mysql_enterprise_backup_binary_path** --  Returns the MySQL Enterprise backup binary path
    details

    **no_lock_status**                  --  Returns the No Lock check box status for MySQL Instance

    **ssl_enabled**                     --  Returns(boolean) True/False based on SSL status

"""

from __future__ import unicode_literals
from ..instance import Instance
from ..exception import SDKException


class MYSQLInstance(Instance):
    """
    Class to represent a standalone MYSQL Instance
    """

    def __init__(self, agent_object, instance_name, instance_id=None):
        """Initialise the Subclient object.

            Args:
                agent_object    (object)  --  instance of the Agent class

                instance_name   (str)     --  name of the instance

                instance_id     (str)     --  id of the instance

                    default: None

            Returns:
                object - instance of the MYSQLInstance class

        """
        self._browse_restore_json = None
        self._commonoption_restore_json = None
        self._destination_restore_json = None
        self._fileoption_restore_json = None
        self._instance = None
        self.admin_option_json = None
        self.mysql_restore_json = None
        super(MYSQLInstance, self).__init__(agent_object, instance_name, instance_id)

    @property
    def port(self):
        """Returns the MySQL Server Port number.

        Returns:
            (str)   --  MySql server port number

        """
        return self._properties.get('mySqlInstance', {}).get('port', None)

    @property
    def mysql_username(self):
        """Returns the MySQL Server username.

        Returns:
            (str)   --  MySql server SA username

        """
        return self._properties.get('mySqlInstance', {}).get('SAUser', {}).get('userName', None)

    @property
    def nt_username(self):
        """Returns the MySQL Server nt username.

        Returns:
            (str)   --  MySql server NT username

        """
        return self._properties.get('mySqlInstance', {}).get('NTUser', {}).get('userName', None)

    @property
    def config_file(self):
        """Returns the MySQL Server Config File location.

        Returns:
            (str)   --  MySql server config file location

        """
        return self._properties.get('mySqlInstance', {}).get('ConfigFile', None)

    @property
    def binary_directory(self):
        """Returns the MySQL Server Binary File location.

        Returns:
            (str)   --  MySql server binary directory

        """
        return self._properties.get('mySqlInstance', {}).get('BinaryDirectory', None)

    @property
    def version(self):
        """Returns the MySQL Server version number.

        Returns:
            (str)   --  MySql server version

        """
        return self._properties.get('mySqlInstance', {}).get('version', None)

    @property
    def log_data_directory(self):
        """Returns the MySQL Server log data directory.

        Returns:
            (str)   --  MySql server log directory path

        """
        return self._properties.get('mySqlInstance', {}).get('LogDataDirectory', None)

    @property
    def log_backup_sp_details(self):
        """Returns the MySQL Server Log backup SP details

        Returns:
            (dict)  --  MySql server log backup storage policy information

        """
        log_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
            'logStoragePolicy', {}).get('storagePolicyName', None)
        log_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
            'logStoragePolicy', {}).get('storagePolicyId', None)

        log_sp = {"storagePolicyName": log_storage_policy_name,
                  "storagePolicyId": log_storage_policy_id}
        return log_sp

    @property
    def command_line_sp_details(self):
        """Returns the MySQL Server commandline SP details.

        Returns:
            (dict)  --  MySql server commnadline storage policy information

        """
        cmd_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
            'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
                'storagePolicyName', None)
        cmd_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
            'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
                'storagePolicyId', None)

        command_sp = {"storagePolicyName": cmd_storage_policy_name,
                      "storagePolicyId": cmd_storage_policy_id}
        return command_sp

    @property
    def autodiscovery_enabled(self):
        """Returns the MySQL Server auto discovery enabled flag

        Returns:
            (bool)  --  True if auto discovery enabled
                        False if auto discovery not enabled

        """
        return self._properties.get('mySqlInstance', {}).get('EnableAutoDiscovery', False)

    @property
    def xtrabackup_bin_path(self):
        """Returns the MySQL Server xtrabackup bin path

        Returns:
            (str)   --  MySql server xtrabackup binary path

        """
        return self._properties.get(
            'mySqlInstance', {}).get(
                'xtraBackupSettings', {}).get('xtraBackupBinPath', "")

    @property
    def is_xtrabackup_enabled(self):
        """Returns the MySQL Server xtrabackup enabled flag

        Returns:
            (bool)  --  True if xtrabackup is enabled
                        False if xtrabackup is not enabled

        """
        return self._properties.get(
            'mySqlInstance', {}).get(
                'xtraBackupSettings', {}).get('enableXtraBackup', False)

    @property
    def proxy_options(self):
        """Returns the MySQL Server proxy options

        Returns:
            (dict)  --  MySql server proxy information

        """
        proxy_settings = self._properties.get('mySqlInstance', {}).get('proxySettings', {})
        proxy_opt = {
            "isUseSSL": proxy_settings.get('isUseSSL', False),
            "isProxyEnabled": proxy_settings.get('isProxyEnabled', False),
            "runBackupOnProxy": proxy_settings.get('runBackupOnProxy', False),
            "instanceId": proxy_settings.get('proxyInstance', {}).get('instanceId', None),
            "instanceName": proxy_settings.get('proxyInstance', {}).get('instanceName', None),
            "clientId": proxy_settings.get('proxyInstance', {}).get('clientId', None),
            "clientName": proxy_settings.get('proxyInstance', {}).get('clientName', None)}
        return proxy_opt

    @property
    def mysql_enterprise_backup_binary_path(self):
        """ Returns the MySQL Enterprise backup binary path detail

            Return Type: dict

        """
        meb_settings = self._properties.get('mySqlInstance', {}).get('mebSettings', {})
        return meb_settings

    @mysql_enterprise_backup_binary_path.setter
    def mysql_enterprise_backup_binary_path(self, value):
        """ Setter for MySQL Enterprise backup binary path

            Args:

                value (str)  -- Contains the MySQL Enterprise backup binary path to be updated
                in MySQL Instance property

        """
        if not isinstance(value, str):
            raise SDKException('Instance', '101')
        properties = self._properties
        meb_bin_path_update = {
            "enableMEB": False if value == '' else True,
            "mebBinPath": value
        }
        properties['mySqlInstance']['mebSettings'] = meb_bin_path_update
        self.update_properties(properties)

    @property
    def no_lock_status(self):
        """ Returns the status of No Lock Checkbox in MySQL Instance

            Returns:
            (bool)  --  True if No Lock checkbox is enabled
                        False if No Lock checkbox is disabled

        """
        return self._properties.get('mySqlInstance', {}).get('EnableNoLocking', False)

    @no_lock_status.setter
    def no_lock_status(self, value):
        """ Setter for No Lock property in MySQL Instance

            Args:

                value (bool)  -- True or False to enable or disable the No Lock
                property in MySQL Instance

        """
        if not isinstance(value, bool):
            raise SDKException('Instance', '101')
        properties = self._properties
        properties['mySqlInstance']['EnableNoLocking'] = value
        self.update_properties(properties)

    @property
    def ssl_enabled(self):
        """ Returns(boolean) True/False based on SSL status """
        return self._properties.get('mySqlInstance', {}).get('sslEnabled', False)

    def _get_instance_properties(self):
        """Gets the properties of this instance.

            Raises:
                SDKException:
                    if response is empty

                    if response is not success

        """
        super(MYSQLInstance, self)._get_instance_properties()
        self._instance = {
            "type": 0,
            "clientName": self._agent_object._client_object.client_name,
            "clientSidePackage": True,
            "subclientName": "",
            "backupsetName": "defaultDummyBackupSet",
            "instanceName": self.instance_name,
            "appName": self._agent_object.agent_name,
            "consumeLicense": True
        }

    def _restore_json(self, **kwargs):
        """Returns the JSON request to pass to the API as per the options selected by the user.

            Args:
                kwargs   (list)  --  list of options need to be set for restore

            Returns:
                dict - JSON request to pass to the API

        """
        rest_json = super(MYSQLInstance, self)._restore_json(**kwargs)
        restore_option = {}
        if kwargs.get("restore_option"):
            restore_option = kwargs["restore_option"]
            for key in kwargs:
                if not key == "restore_option":
                    restore_option[key] = kwargs[key]
        else:
            restore_option.update(kwargs)

        if restore_option["from_time"] is None:
            restore_option["from_time"] = {}

        if restore_option["to_time"] is None:
            restore_option["to_time"] = {}

        self._restore_admin_option_json(restore_option)
        self._restore_mysql_option_json(restore_option)
        rest_json["taskInfo"]["subTasks"][0]["options"]["restoreOptions"][
            "mySqlRstOption"] = self.mysql_restore_json
        rest_json["taskInfo"]["subTasks"][0]["options"]["adminOpts"] = self.admin_option_json
        return rest_json

    def restore_in_place(
            self,
            path=None,
            staging=None,
            dest_client_name=None,
            dest_instance_name=None,
            data_restore=True,
            log_restore=False,
            overwrite=True,
            copy_precedence=None,
            from_time=None,
            to_time=None,
            media_agent=None,
            table_level_restore=False,
            clone_env=False,
            clone_options=None,
            redirect_enabled=False,
            redirect_path=None,
            browse_jobid=None):
        """Restores the mysql data/log files specified in the input paths list to the same location.

            Args:
                path                    (list)  --  list of database/databases to be restored

                    default: None

                staging                 (str)   --  staging location for mysql logs during restores

                    default: None

                dest_client_name        (str)   --  destination client name where files are to be
                restored

                    default: None

                dest_instance_name      (str)   --  destination mysql instance name of destination
                client

                    default: None

                data_restore            (bool)  --  for data only/data+log restore

                    default: True

                log_restore             (bool)  --  for log only/data+log restore

                    default: False

                overwrite               (bool)  --  unconditional overwrite files during restore

                    default: True

                copy_precedence         (int)   --  copy precedence value of storage policy copy

                    default: None

                from_time               (str)   --  time to retore the contents after
                        format: YYYY-MM-DD HH:MM:SS

                    default: None

                to_time                 (str)   --  time to retore the contents before
                        format: YYYY-MM-DD HH:MM:SS

                    default: None

                media_agent             (str)   --  media agent associated

                    default: None

                table_level_restore     (bool)  --  Table level restore flag

                    default: False

                clone_env               (bool)  --  boolean to specify whether the database
                should be cloned or not

                    default: False

                clone_options           (dict)  --  clone restore options passed in a dict

                    default: None

                    Accepted format: {
                                        "stagingLocaion": "/gk_snap",
                                        "forceCleanup": True,
                                        "port": "5595",
                                        "libDirectory": "",
                                        "isInstanceSelected": True,
                                        "reservationPeriodS": 3600,
                                        "user": "",
                                        "binaryDirectory": "/usr/bin"

                                     }

                redirect_enabled         (bool)  --  boolean to specify if redirect restore is
                enabled

                    default: False

                redirect_path           (str)   --  Path specified in advanced restore options
                in order to perform redirect restore

                    default: None

                browse_jobid           (int)   --  Browse jobid to browse and restore from

                    default: None

            Returns:
                object - instance of the Job class for this restore job

            Raises:
                SDKException:
                    if paths is not a list

                    if failed to initialize job

                    if response is empty

                    if response is not success

        """
        if not (isinstance(path, list) and
                isinstance(overwrite, bool)):
            raise SDKException('Instance', '101')

        if path == []:
            raise SDKException('Instance', '104')

        if dest_client_name is None:
            dest_client_name = self._agent_object._client_object.client_name

        if dest_instance_name is None:
            dest_instance_name = self.instance_name

        request_json = self._restore_json(
            paths=path,
            staging=staging,
            dest_client_name=dest_client_name,
            dest_instance_name=dest_instance_name,
            data_restore=data_restore,
            log_restore=log_restore,
            overwrite=overwrite,
            copy_precedence=copy_precedence,
            from_time=from_time,
            to_time=to_time,
            media_agent=media_agent,
            table_level_restore=table_level_restore,
            clone_env=clone_env,
            clone_options=clone_options,
            redirect_enabled=redirect_enabled,
            redirect_path=redirect_path,
            browse_jobid=browse_jobid)

        return self._process_restore_response(request_json)

    def _restore_browse_option_json(self, value):
        """setter for the Browse options for restore in Json"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')
        super(MYSQLInstance, self)._restore_browse_option_json(value)
        self._browse_restore_json['backupset'] = {
            "clientName": self._agent_object._client_object.client_name,
            "backupsetName": "defaultDummyBackupSet"
        }

        if value.get("browse_jobid"):
            self._browse_restore_json['browseJobId'] = value.get("browse_jobid")

        if value.get("from_time") and value.get("to_time"):
            self._browse_restore_json["timeRange"] = {"fromTime" : value.get("from_time"),
                                                      "toTime" : value.get("to_time")}

    def _restore_common_options_json(self, value):
        """setter for the Common options in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._commonoption_restore_json = {
            "restoreToDisk": False,
            "onePassRestore": False,
            "revert": False,
            "syncRestore": False
        }

    def _restore_destination_json(self, value):
        """setter for the MySQL Destination options in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._destination_restore_json = {
            "destinationInstance": {
                "clientName": value.get("dest_client_name", ""),
                "instanceName": value.get("dest_instance_name", ""),
                "appName": "MySQL"
            },
            "destClient": {
                "clientName": value.get("dest_client_name", "")
            }
        }

    def _restore_fileoption_json(self, value):
        """setter for the fileoption restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._fileoption_restore_json = {
            "sourceItem": value.get("paths", [])
        }

    def _restore_admin_option_json(self, value):
        """setter for the admin restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self.admin_option_json = {
            "contentIndexingOption": {
                "subClientBasedAnalytics": False
            }
        }

    def _restore_mysql_option_json(self, value):
        """setter for the mysql restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self.mysql_restore_json = {
            "destinationFolder": "",
            "data": value.get("data_restore", True),
            "log": value.get("log_restore", True),
            "recurringRestore": False,
            "temporaryStagingLocation": value.get("staging", ""),
            "dataStagingLocation": "",
            "logRestoreType": 0,
            "tableLevelRestore": value.get("table_level_restore", False),
            "pointofTime": True if value.get("to_time") else False,
            "instanceRestore": True,
            "isCloneRestore": value.get("clone_env", False),
            "fromTime": value.get("from_time", {}),
            "refTime": value.get("to_time", {}),
            "destinationServer": {
                "name": ""
            }
        }
        if value.get("table_level_restore"):
            self.mysql_restore_json['dropTable'] = True
            self.mysql_restore_json['instanceRestore'] = False

        if value.get("clone_env", False):
            self.mysql_restore_json["cloneOptions"] = value.get("clone_options", "")

        if value.get("redirect_path"):
            self.mysql_restore_json["redirectEnabled"] = True
            self.mysql_restore_json["redirectItems"] = [value.get("redirect_path")]

        if value.get("from_time"):
            self.mysql_restore_json["fromTime"] = {"time" : value.get("to_time")}

        if value.get("to_time"):
            self.mysql_restore_json["refTime"] = {"time" : value.get("to_time")}

        if value.get("to_time"):
            self.mysql_restore_json["pointInTime"] = {"time" : value.get("to_time")}

        if value.get("dest_instance_name"):
            self.mysql_restore_json["destinationServer"] = {"name": value.get(
                "dest_instance_name")}

Classes

class MYSQLInstance (agent_object, instance_name, instance_id=None)

Class to represent a standalone MYSQL Instance

Initialise the Subclient object.

Args

agent_object (object) – instance of the Agent class

instance_name (str) – name of the instance

instance_id (str) – id of the instance

default: None

Returns

object - instance of the MYSQLInstance class

Expand source code Browse git
class MYSQLInstance(Instance):
    """
    Class to represent a standalone MYSQL Instance
    """

    def __init__(self, agent_object, instance_name, instance_id=None):
        """Initialise the Subclient object.

            Args:
                agent_object    (object)  --  instance of the Agent class

                instance_name   (str)     --  name of the instance

                instance_id     (str)     --  id of the instance

                    default: None

            Returns:
                object - instance of the MYSQLInstance class

        """
        self._browse_restore_json = None
        self._commonoption_restore_json = None
        self._destination_restore_json = None
        self._fileoption_restore_json = None
        self._instance = None
        self.admin_option_json = None
        self.mysql_restore_json = None
        super(MYSQLInstance, self).__init__(agent_object, instance_name, instance_id)

    @property
    def port(self):
        """Returns the MySQL Server Port number.

        Returns:
            (str)   --  MySql server port number

        """
        return self._properties.get('mySqlInstance', {}).get('port', None)

    @property
    def mysql_username(self):
        """Returns the MySQL Server username.

        Returns:
            (str)   --  MySql server SA username

        """
        return self._properties.get('mySqlInstance', {}).get('SAUser', {}).get('userName', None)

    @property
    def nt_username(self):
        """Returns the MySQL Server nt username.

        Returns:
            (str)   --  MySql server NT username

        """
        return self._properties.get('mySqlInstance', {}).get('NTUser', {}).get('userName', None)

    @property
    def config_file(self):
        """Returns the MySQL Server Config File location.

        Returns:
            (str)   --  MySql server config file location

        """
        return self._properties.get('mySqlInstance', {}).get('ConfigFile', None)

    @property
    def binary_directory(self):
        """Returns the MySQL Server Binary File location.

        Returns:
            (str)   --  MySql server binary directory

        """
        return self._properties.get('mySqlInstance', {}).get('BinaryDirectory', None)

    @property
    def version(self):
        """Returns the MySQL Server version number.

        Returns:
            (str)   --  MySql server version

        """
        return self._properties.get('mySqlInstance', {}).get('version', None)

    @property
    def log_data_directory(self):
        """Returns the MySQL Server log data directory.

        Returns:
            (str)   --  MySql server log directory path

        """
        return self._properties.get('mySqlInstance', {}).get('LogDataDirectory', None)

    @property
    def log_backup_sp_details(self):
        """Returns the MySQL Server Log backup SP details

        Returns:
            (dict)  --  MySql server log backup storage policy information

        """
        log_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
            'logStoragePolicy', {}).get('storagePolicyName', None)
        log_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
            'logStoragePolicy', {}).get('storagePolicyId', None)

        log_sp = {"storagePolicyName": log_storage_policy_name,
                  "storagePolicyId": log_storage_policy_id}
        return log_sp

    @property
    def command_line_sp_details(self):
        """Returns the MySQL Server commandline SP details.

        Returns:
            (dict)  --  MySql server commnadline storage policy information

        """
        cmd_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
            'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
                'storagePolicyName', None)
        cmd_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
            'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
                'storagePolicyId', None)

        command_sp = {"storagePolicyName": cmd_storage_policy_name,
                      "storagePolicyId": cmd_storage_policy_id}
        return command_sp

    @property
    def autodiscovery_enabled(self):
        """Returns the MySQL Server auto discovery enabled flag

        Returns:
            (bool)  --  True if auto discovery enabled
                        False if auto discovery not enabled

        """
        return self._properties.get('mySqlInstance', {}).get('EnableAutoDiscovery', False)

    @property
    def xtrabackup_bin_path(self):
        """Returns the MySQL Server xtrabackup bin path

        Returns:
            (str)   --  MySql server xtrabackup binary path

        """
        return self._properties.get(
            'mySqlInstance', {}).get(
                'xtraBackupSettings', {}).get('xtraBackupBinPath', "")

    @property
    def is_xtrabackup_enabled(self):
        """Returns the MySQL Server xtrabackup enabled flag

        Returns:
            (bool)  --  True if xtrabackup is enabled
                        False if xtrabackup is not enabled

        """
        return self._properties.get(
            'mySqlInstance', {}).get(
                'xtraBackupSettings', {}).get('enableXtraBackup', False)

    @property
    def proxy_options(self):
        """Returns the MySQL Server proxy options

        Returns:
            (dict)  --  MySql server proxy information

        """
        proxy_settings = self._properties.get('mySqlInstance', {}).get('proxySettings', {})
        proxy_opt = {
            "isUseSSL": proxy_settings.get('isUseSSL', False),
            "isProxyEnabled": proxy_settings.get('isProxyEnabled', False),
            "runBackupOnProxy": proxy_settings.get('runBackupOnProxy', False),
            "instanceId": proxy_settings.get('proxyInstance', {}).get('instanceId', None),
            "instanceName": proxy_settings.get('proxyInstance', {}).get('instanceName', None),
            "clientId": proxy_settings.get('proxyInstance', {}).get('clientId', None),
            "clientName": proxy_settings.get('proxyInstance', {}).get('clientName', None)}
        return proxy_opt

    @property
    def mysql_enterprise_backup_binary_path(self):
        """ Returns the MySQL Enterprise backup binary path detail

            Return Type: dict

        """
        meb_settings = self._properties.get('mySqlInstance', {}).get('mebSettings', {})
        return meb_settings

    @mysql_enterprise_backup_binary_path.setter
    def mysql_enterprise_backup_binary_path(self, value):
        """ Setter for MySQL Enterprise backup binary path

            Args:

                value (str)  -- Contains the MySQL Enterprise backup binary path to be updated
                in MySQL Instance property

        """
        if not isinstance(value, str):
            raise SDKException('Instance', '101')
        properties = self._properties
        meb_bin_path_update = {
            "enableMEB": False if value == '' else True,
            "mebBinPath": value
        }
        properties['mySqlInstance']['mebSettings'] = meb_bin_path_update
        self.update_properties(properties)

    @property
    def no_lock_status(self):
        """ Returns the status of No Lock Checkbox in MySQL Instance

            Returns:
            (bool)  --  True if No Lock checkbox is enabled
                        False if No Lock checkbox is disabled

        """
        return self._properties.get('mySqlInstance', {}).get('EnableNoLocking', False)

    @no_lock_status.setter
    def no_lock_status(self, value):
        """ Setter for No Lock property in MySQL Instance

            Args:

                value (bool)  -- True or False to enable or disable the No Lock
                property in MySQL Instance

        """
        if not isinstance(value, bool):
            raise SDKException('Instance', '101')
        properties = self._properties
        properties['mySqlInstance']['EnableNoLocking'] = value
        self.update_properties(properties)

    @property
    def ssl_enabled(self):
        """ Returns(boolean) True/False based on SSL status """
        return self._properties.get('mySqlInstance', {}).get('sslEnabled', False)

    def _get_instance_properties(self):
        """Gets the properties of this instance.

            Raises:
                SDKException:
                    if response is empty

                    if response is not success

        """
        super(MYSQLInstance, self)._get_instance_properties()
        self._instance = {
            "type": 0,
            "clientName": self._agent_object._client_object.client_name,
            "clientSidePackage": True,
            "subclientName": "",
            "backupsetName": "defaultDummyBackupSet",
            "instanceName": self.instance_name,
            "appName": self._agent_object.agent_name,
            "consumeLicense": True
        }

    def _restore_json(self, **kwargs):
        """Returns the JSON request to pass to the API as per the options selected by the user.

            Args:
                kwargs   (list)  --  list of options need to be set for restore

            Returns:
                dict - JSON request to pass to the API

        """
        rest_json = super(MYSQLInstance, self)._restore_json(**kwargs)
        restore_option = {}
        if kwargs.get("restore_option"):
            restore_option = kwargs["restore_option"]
            for key in kwargs:
                if not key == "restore_option":
                    restore_option[key] = kwargs[key]
        else:
            restore_option.update(kwargs)

        if restore_option["from_time"] is None:
            restore_option["from_time"] = {}

        if restore_option["to_time"] is None:
            restore_option["to_time"] = {}

        self._restore_admin_option_json(restore_option)
        self._restore_mysql_option_json(restore_option)
        rest_json["taskInfo"]["subTasks"][0]["options"]["restoreOptions"][
            "mySqlRstOption"] = self.mysql_restore_json
        rest_json["taskInfo"]["subTasks"][0]["options"]["adminOpts"] = self.admin_option_json
        return rest_json

    def restore_in_place(
            self,
            path=None,
            staging=None,
            dest_client_name=None,
            dest_instance_name=None,
            data_restore=True,
            log_restore=False,
            overwrite=True,
            copy_precedence=None,
            from_time=None,
            to_time=None,
            media_agent=None,
            table_level_restore=False,
            clone_env=False,
            clone_options=None,
            redirect_enabled=False,
            redirect_path=None,
            browse_jobid=None):
        """Restores the mysql data/log files specified in the input paths list to the same location.

            Args:
                path                    (list)  --  list of database/databases to be restored

                    default: None

                staging                 (str)   --  staging location for mysql logs during restores

                    default: None

                dest_client_name        (str)   --  destination client name where files are to be
                restored

                    default: None

                dest_instance_name      (str)   --  destination mysql instance name of destination
                client

                    default: None

                data_restore            (bool)  --  for data only/data+log restore

                    default: True

                log_restore             (bool)  --  for log only/data+log restore

                    default: False

                overwrite               (bool)  --  unconditional overwrite files during restore

                    default: True

                copy_precedence         (int)   --  copy precedence value of storage policy copy

                    default: None

                from_time               (str)   --  time to retore the contents after
                        format: YYYY-MM-DD HH:MM:SS

                    default: None

                to_time                 (str)   --  time to retore the contents before
                        format: YYYY-MM-DD HH:MM:SS

                    default: None

                media_agent             (str)   --  media agent associated

                    default: None

                table_level_restore     (bool)  --  Table level restore flag

                    default: False

                clone_env               (bool)  --  boolean to specify whether the database
                should be cloned or not

                    default: False

                clone_options           (dict)  --  clone restore options passed in a dict

                    default: None

                    Accepted format: {
                                        "stagingLocaion": "/gk_snap",
                                        "forceCleanup": True,
                                        "port": "5595",
                                        "libDirectory": "",
                                        "isInstanceSelected": True,
                                        "reservationPeriodS": 3600,
                                        "user": "",
                                        "binaryDirectory": "/usr/bin"

                                     }

                redirect_enabled         (bool)  --  boolean to specify if redirect restore is
                enabled

                    default: False

                redirect_path           (str)   --  Path specified in advanced restore options
                in order to perform redirect restore

                    default: None

                browse_jobid           (int)   --  Browse jobid to browse and restore from

                    default: None

            Returns:
                object - instance of the Job class for this restore job

            Raises:
                SDKException:
                    if paths is not a list

                    if failed to initialize job

                    if response is empty

                    if response is not success

        """
        if not (isinstance(path, list) and
                isinstance(overwrite, bool)):
            raise SDKException('Instance', '101')

        if path == []:
            raise SDKException('Instance', '104')

        if dest_client_name is None:
            dest_client_name = self._agent_object._client_object.client_name

        if dest_instance_name is None:
            dest_instance_name = self.instance_name

        request_json = self._restore_json(
            paths=path,
            staging=staging,
            dest_client_name=dest_client_name,
            dest_instance_name=dest_instance_name,
            data_restore=data_restore,
            log_restore=log_restore,
            overwrite=overwrite,
            copy_precedence=copy_precedence,
            from_time=from_time,
            to_time=to_time,
            media_agent=media_agent,
            table_level_restore=table_level_restore,
            clone_env=clone_env,
            clone_options=clone_options,
            redirect_enabled=redirect_enabled,
            redirect_path=redirect_path,
            browse_jobid=browse_jobid)

        return self._process_restore_response(request_json)

    def _restore_browse_option_json(self, value):
        """setter for the Browse options for restore in Json"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')
        super(MYSQLInstance, self)._restore_browse_option_json(value)
        self._browse_restore_json['backupset'] = {
            "clientName": self._agent_object._client_object.client_name,
            "backupsetName": "defaultDummyBackupSet"
        }

        if value.get("browse_jobid"):
            self._browse_restore_json['browseJobId'] = value.get("browse_jobid")

        if value.get("from_time") and value.get("to_time"):
            self._browse_restore_json["timeRange"] = {"fromTime" : value.get("from_time"),
                                                      "toTime" : value.get("to_time")}

    def _restore_common_options_json(self, value):
        """setter for the Common options in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._commonoption_restore_json = {
            "restoreToDisk": False,
            "onePassRestore": False,
            "revert": False,
            "syncRestore": False
        }

    def _restore_destination_json(self, value):
        """setter for the MySQL Destination options in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._destination_restore_json = {
            "destinationInstance": {
                "clientName": value.get("dest_client_name", ""),
                "instanceName": value.get("dest_instance_name", ""),
                "appName": "MySQL"
            },
            "destClient": {
                "clientName": value.get("dest_client_name", "")
            }
        }

    def _restore_fileoption_json(self, value):
        """setter for the fileoption restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self._fileoption_restore_json = {
            "sourceItem": value.get("paths", [])
        }

    def _restore_admin_option_json(self, value):
        """setter for the admin restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self.admin_option_json = {
            "contentIndexingOption": {
                "subClientBasedAnalytics": False
            }
        }

    def _restore_mysql_option_json(self, value):
        """setter for the mysql restore option in restore JSON"""

        if not isinstance(value, dict):
            raise SDKException('Instance', '101')

        self.mysql_restore_json = {
            "destinationFolder": "",
            "data": value.get("data_restore", True),
            "log": value.get("log_restore", True),
            "recurringRestore": False,
            "temporaryStagingLocation": value.get("staging", ""),
            "dataStagingLocation": "",
            "logRestoreType": 0,
            "tableLevelRestore": value.get("table_level_restore", False),
            "pointofTime": True if value.get("to_time") else False,
            "instanceRestore": True,
            "isCloneRestore": value.get("clone_env", False),
            "fromTime": value.get("from_time", {}),
            "refTime": value.get("to_time", {}),
            "destinationServer": {
                "name": ""
            }
        }
        if value.get("table_level_restore"):
            self.mysql_restore_json['dropTable'] = True
            self.mysql_restore_json['instanceRestore'] = False

        if value.get("clone_env", False):
            self.mysql_restore_json["cloneOptions"] = value.get("clone_options", "")

        if value.get("redirect_path"):
            self.mysql_restore_json["redirectEnabled"] = True
            self.mysql_restore_json["redirectItems"] = [value.get("redirect_path")]

        if value.get("from_time"):
            self.mysql_restore_json["fromTime"] = {"time" : value.get("to_time")}

        if value.get("to_time"):
            self.mysql_restore_json["refTime"] = {"time" : value.get("to_time")}

        if value.get("to_time"):
            self.mysql_restore_json["pointInTime"] = {"time" : value.get("to_time")}

        if value.get("dest_instance_name"):
            self.mysql_restore_json["destinationServer"] = {"name": value.get(
                "dest_instance_name")}

Ancestors

Instance variables

var autodiscovery_enabled

Returns the MySQL Server auto discovery enabled flag

Returns

(bool) – True if auto discovery enabled False if auto discovery not enabled

Expand source code Browse git
@property
def autodiscovery_enabled(self):
    """Returns the MySQL Server auto discovery enabled flag

    Returns:
        (bool)  --  True if auto discovery enabled
                    False if auto discovery not enabled

    """
    return self._properties.get('mySqlInstance', {}).get('EnableAutoDiscovery', False)
var binary_directory

Returns the MySQL Server Binary File location.

Returns

(str) – MySql server binary directory

Expand source code Browse git
@property
def binary_directory(self):
    """Returns the MySQL Server Binary File location.

    Returns:
        (str)   --  MySql server binary directory

    """
    return self._properties.get('mySqlInstance', {}).get('BinaryDirectory', None)
var command_line_sp_details

Returns the MySQL Server commandline SP details.

Returns

(dict) – MySql server commnadline storage policy information

Expand source code Browse git
@property
def command_line_sp_details(self):
    """Returns the MySQL Server commandline SP details.

    Returns:
        (dict)  --  MySql server commnadline storage policy information

    """
    cmd_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
        'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
            'storagePolicyName', None)
    cmd_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
        'mysqlStorageDevice', {}).get('commandLineStoragePolicy', {}).get(
            'storagePolicyId', None)

    command_sp = {"storagePolicyName": cmd_storage_policy_name,
                  "storagePolicyId": cmd_storage_policy_id}
    return command_sp
var config_file

Returns the MySQL Server Config File location.

Returns

(str) – MySql server config file location

Expand source code Browse git
@property
def config_file(self):
    """Returns the MySQL Server Config File location.

    Returns:
        (str)   --  MySql server config file location

    """
    return self._properties.get('mySqlInstance', {}).get('ConfigFile', None)
var is_xtrabackup_enabled

Returns the MySQL Server xtrabackup enabled flag

Returns

(bool) – True if xtrabackup is enabled False if xtrabackup is not enabled

Expand source code Browse git
@property
def is_xtrabackup_enabled(self):
    """Returns the MySQL Server xtrabackup enabled flag

    Returns:
        (bool)  --  True if xtrabackup is enabled
                    False if xtrabackup is not enabled

    """
    return self._properties.get(
        'mySqlInstance', {}).get(
            'xtraBackupSettings', {}).get('enableXtraBackup', False)
var log_backup_sp_details

Returns the MySQL Server Log backup SP details

Returns

(dict) – MySql server log backup storage policy information

Expand source code Browse git
@property
def log_backup_sp_details(self):
    """Returns the MySQL Server Log backup SP details

    Returns:
        (dict)  --  MySql server log backup storage policy information

    """
    log_storage_policy_name = self._properties.get('mySqlInstance', {}).get(
        'logStoragePolicy', {}).get('storagePolicyName', None)
    log_storage_policy_id = self._properties.get('mySqlInstance', {}).get(
        'logStoragePolicy', {}).get('storagePolicyId', None)

    log_sp = {"storagePolicyName": log_storage_policy_name,
              "storagePolicyId": log_storage_policy_id}
    return log_sp
var log_data_directory

Returns the MySQL Server log data directory.

Returns

(str) – MySql server log directory path

Expand source code Browse git
@property
def log_data_directory(self):
    """Returns the MySQL Server log data directory.

    Returns:
        (str)   --  MySql server log directory path

    """
    return self._properties.get('mySqlInstance', {}).get('LogDataDirectory', None)
var mysql_enterprise_backup_binary_path

Returns the MySQL Enterprise backup binary path detail

Return Type: dict

Expand source code Browse git
@property
def mysql_enterprise_backup_binary_path(self):
    """ Returns the MySQL Enterprise backup binary path detail

        Return Type: dict

    """
    meb_settings = self._properties.get('mySqlInstance', {}).get('mebSettings', {})
    return meb_settings
var mysql_username

Returns the MySQL Server username.

Returns

(str) – MySql server SA username

Expand source code Browse git
@property
def mysql_username(self):
    """Returns the MySQL Server username.

    Returns:
        (str)   --  MySql server SA username

    """
    return self._properties.get('mySqlInstance', {}).get('SAUser', {}).get('userName', None)
var no_lock_status

Returns the status of No Lock Checkbox in MySQL Instance

Returns: (bool) – True if No Lock checkbox is enabled False if No Lock checkbox is disabled

Expand source code Browse git
@property
def no_lock_status(self):
    """ Returns the status of No Lock Checkbox in MySQL Instance

        Returns:
        (bool)  --  True if No Lock checkbox is enabled
                    False if No Lock checkbox is disabled

    """
    return self._properties.get('mySqlInstance', {}).get('EnableNoLocking', False)
var nt_username

Returns the MySQL Server nt username.

Returns

(str) – MySql server NT username

Expand source code Browse git
@property
def nt_username(self):
    """Returns the MySQL Server nt username.

    Returns:
        (str)   --  MySql server NT username

    """
    return self._properties.get('mySqlInstance', {}).get('NTUser', {}).get('userName', None)
var port

Returns the MySQL Server Port number.

Returns

(str) – MySql server port number

Expand source code Browse git
@property
def port(self):
    """Returns the MySQL Server Port number.

    Returns:
        (str)   --  MySql server port number

    """
    return self._properties.get('mySqlInstance', {}).get('port', None)
var proxy_options

Returns the MySQL Server proxy options

Returns

(dict) – MySql server proxy information

Expand source code Browse git
@property
def proxy_options(self):
    """Returns the MySQL Server proxy options

    Returns:
        (dict)  --  MySql server proxy information

    """
    proxy_settings = self._properties.get('mySqlInstance', {}).get('proxySettings', {})
    proxy_opt = {
        "isUseSSL": proxy_settings.get('isUseSSL', False),
        "isProxyEnabled": proxy_settings.get('isProxyEnabled', False),
        "runBackupOnProxy": proxy_settings.get('runBackupOnProxy', False),
        "instanceId": proxy_settings.get('proxyInstance', {}).get('instanceId', None),
        "instanceName": proxy_settings.get('proxyInstance', {}).get('instanceName', None),
        "clientId": proxy_settings.get('proxyInstance', {}).get('clientId', None),
        "clientName": proxy_settings.get('proxyInstance', {}).get('clientName', None)}
    return proxy_opt
var ssl_enabled

Returns(boolean) True/False based on SSL status

Expand source code Browse git
@property
def ssl_enabled(self):
    """ Returns(boolean) True/False based on SSL status """
    return self._properties.get('mySqlInstance', {}).get('sslEnabled', False)
var version

Returns the MySQL Server version number.

Returns

(str) – MySql server version

Expand source code Browse git
@property
def version(self):
    """Returns the MySQL Server version number.

    Returns:
        (str)   --  MySql server version

    """
    return self._properties.get('mySqlInstance', {}).get('version', None)
var xtrabackup_bin_path

Returns the MySQL Server xtrabackup bin path

Returns

(str) – MySql server xtrabackup binary path

Expand source code Browse git
@property
def xtrabackup_bin_path(self):
    """Returns the MySQL Server xtrabackup bin path

    Returns:
        (str)   --  MySql server xtrabackup binary path

    """
    return self._properties.get(
        'mySqlInstance', {}).get(
            'xtraBackupSettings', {}).get('xtraBackupBinPath', "")

Methods

def restore_in_place(self, path=None, staging=None, dest_client_name=None, dest_instance_name=None, data_restore=True, log_restore=False, overwrite=True, copy_precedence=None, from_time=None, to_time=None, media_agent=None, table_level_restore=False, clone_env=False, clone_options=None, redirect_enabled=False, redirect_path=None, browse_jobid=None)

Restores the mysql data/log files specified in the input paths list to the same location.

Args

path (list) – list of database/databases to be restored

default: None

staging (str) – staging location for mysql logs during restores

default: None

dest_client_name (str) – destination client name where files are to be restored

default: None

dest_instance_name (str) – destination mysql instance name of destination client

default: None

data_restore (bool) – for data only/data+log restore

default: True

log_restore (bool) – for log only/data+log restore

default: False

overwrite (bool) – unconditional overwrite files during restore

default: True

copy_precedence (int) – copy precedence value of storage policy copy

default: None

from_time (str) – time to retore the contents after format: YYYY-MM-DD HH:MM:SS

default: None

to_time (str) – time to retore the contents before format: YYYY-MM-DD HH:MM:SS

default: None

media_agent (str) – media agent associated

default: None

table_level_restore (bool) – Table level restore flag

default: False

clone_env (bool) – boolean to specify whether the database should be cloned or not

default: False

clone_options (dict) – clone restore options passed in a dict

default: None

Accepted format: {
                    "stagingLocaion": "/gk_snap",
                    "forceCleanup": True,
                    "port": "5595",
                    "libDirectory": "",
                    "isInstanceSelected": True,
                    "reservationPeriodS": 3600,
                    "user": "",
                    "binaryDirectory": "/usr/bin"

                 }

redirect_enabled (bool) – boolean to specify if redirect restore is enabled

default: False

redirect_path (str) – Path specified in advanced restore options in order to perform redirect restore

default: None

browse_jobid (int) – Browse jobid to browse and restore from

default: None

Returns

object - instance of the Job class for this restore job

Raises

SDKException: if paths is not a list

if failed to initialize job

if response is empty

if response is not success
Expand source code Browse git
def restore_in_place(
        self,
        path=None,
        staging=None,
        dest_client_name=None,
        dest_instance_name=None,
        data_restore=True,
        log_restore=False,
        overwrite=True,
        copy_precedence=None,
        from_time=None,
        to_time=None,
        media_agent=None,
        table_level_restore=False,
        clone_env=False,
        clone_options=None,
        redirect_enabled=False,
        redirect_path=None,
        browse_jobid=None):
    """Restores the mysql data/log files specified in the input paths list to the same location.

        Args:
            path                    (list)  --  list of database/databases to be restored

                default: None

            staging                 (str)   --  staging location for mysql logs during restores

                default: None

            dest_client_name        (str)   --  destination client name where files are to be
            restored

                default: None

            dest_instance_name      (str)   --  destination mysql instance name of destination
            client

                default: None

            data_restore            (bool)  --  for data only/data+log restore

                default: True

            log_restore             (bool)  --  for log only/data+log restore

                default: False

            overwrite               (bool)  --  unconditional overwrite files during restore

                default: True

            copy_precedence         (int)   --  copy precedence value of storage policy copy

                default: None

            from_time               (str)   --  time to retore the contents after
                    format: YYYY-MM-DD HH:MM:SS

                default: None

            to_time                 (str)   --  time to retore the contents before
                    format: YYYY-MM-DD HH:MM:SS

                default: None

            media_agent             (str)   --  media agent associated

                default: None

            table_level_restore     (bool)  --  Table level restore flag

                default: False

            clone_env               (bool)  --  boolean to specify whether the database
            should be cloned or not

                default: False

            clone_options           (dict)  --  clone restore options passed in a dict

                default: None

                Accepted format: {
                                    "stagingLocaion": "/gk_snap",
                                    "forceCleanup": True,
                                    "port": "5595",
                                    "libDirectory": "",
                                    "isInstanceSelected": True,
                                    "reservationPeriodS": 3600,
                                    "user": "",
                                    "binaryDirectory": "/usr/bin"

                                 }

            redirect_enabled         (bool)  --  boolean to specify if redirect restore is
            enabled

                default: False

            redirect_path           (str)   --  Path specified in advanced restore options
            in order to perform redirect restore

                default: None

            browse_jobid           (int)   --  Browse jobid to browse and restore from

                default: None

        Returns:
            object - instance of the Job class for this restore job

        Raises:
            SDKException:
                if paths is not a list

                if failed to initialize job

                if response is empty

                if response is not success

    """
    if not (isinstance(path, list) and
            isinstance(overwrite, bool)):
        raise SDKException('Instance', '101')

    if path == []:
        raise SDKException('Instance', '104')

    if dest_client_name is None:
        dest_client_name = self._agent_object._client_object.client_name

    if dest_instance_name is None:
        dest_instance_name = self.instance_name

    request_json = self._restore_json(
        paths=path,
        staging=staging,
        dest_client_name=dest_client_name,
        dest_instance_name=dest_instance_name,
        data_restore=data_restore,
        log_restore=log_restore,
        overwrite=overwrite,
        copy_precedence=copy_precedence,
        from_time=from_time,
        to_time=to_time,
        media_agent=media_agent,
        table_level_restore=table_level_restore,
        clone_env=clone_env,
        clone_options=clone_options,
        redirect_enabled=redirect_enabled,
        redirect_path=redirect_path,
        browse_jobid=browse_jobid)

    return self._process_restore_response(request_json)

Inherited members