Ejemplo n.º 1
0
    def perform_module_operation(self):
        """
        Perform different actions on the port based on user parameters
        specified in the playbook
        """
        port_details = None
        changed = False

        # Get port details
        port_details = self.get_port()
        if port_details is None and self.state == 'absent':
            msg = "Could not get the details of the port {0} from {1}"
            msg = msg.format(self.port_nm, self.cl_name)
            LOG.error(msg)
        elif port_details is None and self.state == 'present':
            msg = "Could not get the details of the port {0} from {1}"
            msg = msg.format(self.port_nm, self.cl_name)
            LOG.error(msg)
            self.module.fail_json(msg=msg)
        elif port_details and self.enabled is not None:
            if self.enabled != port_details.enabled:
                port_details = self.en_dis_port()
                changed = True

        # Finally update the module changed state details
        self.result["changed"] = changed
        if port_details:
            port_details = utils.serialize_content(port_details)
        self.result["port_details"] = port_details
        self.module.exit_json(**self.result)
 def exit_module(volume, change_flag):
     """module exit function"""
     volume = utils.serialize_content(volume)
     if 'itls' in volume:
         volume = filter_itls(volume)
     result = {"changed": change_flag, "storage_details": volume}
     LOG.debug("Result %s\n", result)
     self.module.exit_json(**result)
Ejemplo n.º 3
0
    def perform_module_operation(self):
        """
        Perform Rediscover StorageArray operation based on user parameters
        chosen in playbook
        """
        cluster_name = self.module.params['cluster_name']
        array_name = self.module.params['array_name']
        rediscover = self.module.params['rediscover']
        array_present = self.get_array(cluster_name, array_name)

        changed = False
        result = dict(changed=False, array_details=None)
        array_details = utils.serialize_content(array_present)
        if rediscover:
            LOG.info("Rediscover Array %s", array_name)
            obj_array = self.rediscover_array(cluster_name, array_name)
            array_details = utils.serialize_content(obj_array)
            changed = True

        result['changed'] = changed
        result['array_details'] = array_details
        self.module.exit_json(**result)
    def get_be_port_list(self):
        """Get the list of back end ports on a specific cluster in VPLEX"""

        try:
            be_port = self.api_obj.HardwarePortsApi(api_client=self.client)
            obj = be_port.get_hardware_ports(role="back-end")
            self.logmsg('Back end Port', obj)
            port_details = utils.serialize_content(obj)
            return port_details
        except utils.ApiException as err:
            err_msg = ("Could not get Back end Ports due to"
                       " error: {0}".format(utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_device_migration_list(self):
        """Get the list of device migration jobs in VPLEX"""

        try:
            device_mig = self.api_obj.DataMigrationApi(api_client=self.client)
            obj = device_mig.get_device_migrations()
            self.logmsg('Device migration job', obj)
            device_mig_details = utils.serialize_content(obj)
            return self.parse_data(device_mig_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Device migration jobs due to"
                       " error: {0}".format(utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_initiator_list(self, cluster_name=None):
        """Get the list of initiators on a specific cluster in VPLEX"""

        try:
            initiator = self.api_obj.ExportsApi(api_client=self.client)
            obj = initiator.get_initiator_ports(cluster_name)
            self.logmsg('Initiator', obj, cluster_name)
            initiator_details = utils.serialize_content(obj)
            return self.parse_data(initiator_details, initiator=True)
        except utils.ApiException as err:
            err_msg = ("Could not get Initiators from {0} due to"
                       " error: {1}".format(cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_distributed_virtual_volume_list(self):
        """Get the list of distributed virtual volumes in VPLEX"""

        try:
            dist_virt_volume = self.api_obj.DistributedStorageApi(
                api_client=self.client)
            obj = dist_virt_volume.get_distributed_virtual_volumes()
            self.logmsg('Distributed Virtual Volume', obj)
            dist_virvol_details = utils.serialize_content(obj)
            return self.parse_data(dist_virvol_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Distributed Virtual Volumes due to"
                       " error: {0}".format(utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_distributed_consistency_group_list(self):
        """Get the list of distributed consistency groups in VPLEX"""

        try:
            dist_cgp = self.api_obj.DistributedStorageApi(
                api_client=self.client)
            obj = dist_cgp.get_distributed_consistency_groups()
            self.logmsg('Distributed Consistency Group', obj)
            dist_cg_details = utils.serialize_content(obj)
            return self.parse_data(dist_cg_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Distributed Consistency Groups due to"
                       " error: {0}".format(utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_extent_list(self, cluster_name=None):
        """Get the list of extents on a specific cluster in VPLEX"""

        try:
            extent = self.api_obj.ExtentApi(api_client=self.client)
            obj = extent.get_extents(cluster_name)
            self.logmsg('Extent', obj, cluster_name)
            device_details = utils.serialize_content(obj)
            return self.parse_data(device_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Extents from {0} due to"
                       " error: {1}".format(cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_array_management_provider_list(self, cluster_name=None):
        """Get the list of registered array manamgement providers on a
        specific cluster in VPLEX"""

        try:
            amps = self.api_obj.AmpApi(api_client=self.client)
            obj = amps.get_array_management_providers(cluster_name)
            self.logmsg('Array Management Provider', obj, cluster_name)
            amp_details = utils.serialize_content(obj)
            return self.parse_data(amp_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Array Management Providers from {0}"
                       " due to error: {1}".format(cluster_name,
                                                   utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def get_storage_view_list(self, cluster_name=None):
        """Get the list of storage views on a specific cluster
        in VPLEX"""

        try:
            storage_view = self.api_obj.ExportsApi(api_client=self.client)
            obj = storage_view.get_storage_views(cluster_name)
            self.logmsg('Storage View', obj, cluster_name)
            view_details = utils.serialize_content(obj)
            return self.parse_data(view_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Storage Views from {0} due to"
                       " error: {1}".format(cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 12
0
 def get_cgrp(self, cluster_name, cg_name):
     """
     Get the details of a consistency group.
     """
     try:
         obj_cgrp = self.cgrp.get_consistency_group(cluster_name, cg_name)
         LOG.info("Got consistency group details %s from %s", cg_name,
                  cluster_name)
         LOG.debug("Consistency group Details:\n%s", obj_cgrp)
         cg_details = utils.serialize_content(obj_cgrp)
         return cg_details
     except utils.ApiException as err:
         err_msg = ("Could not get consistency group {0} of {1} due to"
                    " error: {2}".format(cg_name, cluster_name,
                                         utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         return None
    def get_consistency_group_list(self, cluster_name=None):
        """Get the list of consistency groups on a specific cluster
        in VPLEX"""

        try:
            consistency_grp = self.api_obj.ConsistencyGroupApi(
                api_client=self.client)
            obj = consistency_grp.get_consistency_groups(cluster_name)
            self.logmsg('Consistency Group', obj, cluster_name)
            consistency_grp_details = utils.serialize_content(obj)
            return self.parse_data(consistency_grp_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Consistency Groups from {0} due to"
                       " error: {1}".format(cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
 def get_device(self, cluster_name, device_name):
     """
     Get the details of a device
     """
     try:
         obj_device = self.device.get_device(cluster_name, device_name)
         LOG.info("Got device details for %s from %s", device_name,
                  cluster_name)
         LOG.debug("Device Details:\n%s", obj_device)
         device_details = utils.serialize_content(obj_device)
         return device_details
     except utils.ApiException as err:
         err_msg = ("Could not get device {0} details in {1} due to"
                    " error: {2}".format(device_name, cluster_name,
                                         utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         return None
Ejemplo n.º 15
0
    def is_virtual_vol_in_use(self, virtualvol):
        """
        Checks if virtual volume is used by any other storage view
        """
        try:
            get_map = self.maps.get_map(virtualvol)
        except utils.ApiException as err:
            msg = ("Could not get the map view of {0} due to "
                   "error {1}".format(virtualvol, utils.error_msg(err)))
            LOG.error("%s\n%s\n", msg, err)
            self.module.fail_json(msg=msg)

        vview_list = utils.serialize_content(get_map)
        # Collect the storage view if it has virtual volume
        if len(vview_list['parents']) > 0:
            return True
        return False
 def get_d_cgrp(self, dr_cg_name):
     """
     Get the details of a distributed consistency group.
     """
     try:
         obj_dcgrp = self.dcgrp.get_distributed_consistency_group(
             dr_cg_name)
         LOG.info("Got distributed consistency group details %s",
                  dr_cg_name)
         LOG.debug("Distributed consistency group Details:\n%s", obj_dcgrp)
         d_cg_details = utils.serialize_content(obj_dcgrp)
         return d_cg_details
     except utils.ApiException as err:
         err_msg = ("Could not get distributed consistency group {0} due to"
                    " error: {1}".format(dr_cg_name, utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         return None
    def get_virtual_volume_list(self, cluster_name=None):
        """Get the list of virtual volumes on a specific cluster
        in VPLEX"""

        try:
            virtual_volume = self.api_obj.VirtualVolumeApi(
                api_client=self.client)
            obj = virtual_volume.get_virtual_volumes(cluster_name)
            self.logmsg('Virtual Volume', obj, cluster_name)
            virt_vol_details = utils.serialize_content(obj)
            return self.parse_data(virt_vol_details)
        except utils.ApiException as err:
            err_msg = ("Could not get Virtual Volumes from {0} due to"
                       " error: {1}".format(cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
 def create_d_cgrp(self, d_cg_payload):
     """
     Create Distributed consistency group on VPLEX
     """
     try:
         obj_d_cgrp = self.dcgrp.create_distributed_consistency_group(
             d_cg_payload)
         LOG.info("Created distributed consistency group %s",
                  d_cg_payload['name'])
         LOG.debug("Consistency group details:\n%s", obj_d_cgrp)
         d_cg_details = utils.serialize_content(obj_d_cgrp)
         return d_cg_details
     except utils.ApiException as err:
         err_msg = ("Could not create distributed consistency group {0}"
                    " due to error: {1}".format(d_cg_payload['name'],
                                                utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         self.module.fail_json(msg=err_msg)
 def update_d_cgrp(self, dr_cg_name, d_cg_patch_payload):
     """
     Update distributed consistency group attributes
     """
     try:
         obj_dcgrp = self.dcgrp.patch_distributed_consistency_group(
             dr_cg_name, d_cg_patch_payload)
         LOG.info("Final payload: %s", d_cg_patch_payload)
         LOG.info("Updated distributed consistency group %s", dr_cg_name)
         LOG.debug("Distributed consistency group details:\n%s", obj_dcgrp)
         d_cg_details = utils.serialize_content(obj_dcgrp)
         return d_cg_details
     except utils.ApiException as err:
         err_msg = ("Could not update the consistency group {0} due"
                    " to error: {1}".format(dr_cg_name,
                                            utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         self.module.fail_json(msg=err_msg)
    def d_resume(self, dr_cg_name, d_cg_resume_payload):
        """
        resume Distributed consistency group
        """

        try:
            obj_dcgrp = self.dcgrp.resume(dr_cg_name, d_cg_resume_payload)
            LOG.info("Resume on the distributed consistency group %s",
                     dr_cg_name)
            LOG.debug("Distributed consistency group details:\n%s", obj_dcgrp)
            d_cg_details = utils.serialize_content(obj_dcgrp)
            return d_cg_details
        except utils.ApiException as err:
            err_msg = ("Could not resume distributed consistency group {0} due"
                       " to error: {1}".format(dr_cg_name,
                                               utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 21
0
 def create_cgrp(self, cluster_name, cg_payload):
     """
     Create consistency group on VPLEX
     """
     try:
         obj_cgrp = self.cgrp.create_consistency_group(
             cluster_name, cg_payload)
         LOG.info("Created consistency group %s in %s", cg_payload['name'],
                  cluster_name)
         LOG.debug("Consistency group details:\n%s", obj_cgrp)
         cg_details = utils.serialize_content(obj_cgrp)
         return cg_details
     except utils.ApiException as err:
         err_msg = ("Could not create consistency group {0} in {1} due to"
                    " error: {2}".format(cg_payload['name'], cluster_name,
                                         utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         self.module.fail_json(msg=err_msg)
    def create_job(
            self,
            migration_name,
            cluster_name,  # pylint: disable=R0913
            target_cluster,
            source_name,
            target_name,
            transfer_size,
            status):
        """
        Create data migration job on VPLEX
        """

        # Validate the source and the target
        self.validate_src_target(cluster_name, target_cluster, source_name,
                                 target_name)
        try:
            src_uri = ("/vplex/v2/clusters/{0}/{1}/{2}".format(
                cluster_name, self.storage_uri, source_name))
            target_uri = ("/vplex/v2/clusters/{0}/{1}/{2}".format(
                target_cluster, self.storage_uri, target_name))
            data_payload = {
                'name': migration_name,
                'source': src_uri,
                'target': target_uri
            }
            if status == "pause":
                data_payload['paused'] = True
            if transfer_size:
                data_payload['transfer_size'] = transfer_size
            if self.storage == "device":
                job_details = self.data.create_device_migration(data_payload)
            LOG.info("Created a %s migration job %s", self.storage,
                     migration_name)
            LOG.debug("%s migration job details:\n%s", self.storage,
                      job_details)
            job_details = utils.serialize_content(job_details)
            return job_details
        except utils.ApiException as err:
            err_msg = ("Could not create {0} migration job {1} due to"
                       " error: {1}".format(migration_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 23
0
 def exit_module(volume, change_flag):
     """module exit function"""
     volume = utils.serialize_content(volume)
     if vol_type:
         if vol_type == 'mirrored':
             volume['mirrors'] = list(children.values())
             volume['additional_devs'] = []
         elif vol_type == 'expanded':
             volume['mirrors'] = []
             volume['additional_devs'] = list(children.values())
     elif volume != {}:
         volume['mirrors'] = []
         volume['additional_devs'] = []
     result = {
         "changed": change_flag,
         "storage_details": volume
     }
     LOG.debug("Result %s\n", result)
     self.module.exit_json(**result)
Ejemplo n.º 24
0
    def create_device(self, cluster_name, device_payload):
        """
        Create device on VPLEX
        """

        try:
            obj_device = self.device.create_device(cluster_name,
                                                   device_payload)
            LOG.info("Created device in %s", cluster_name)
            LOG.debug("Device details:\n%s", obj_device)
            device_details = utils.serialize_content(obj_device)
            return device_details
        except utils.ApiException as err:
            err_msg = ("Could not create device {0} in {1} due to"
                       " error: {2}".format(device_payload['name'],
                                            cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
 def get_job_details(self, migration_name):
     """
     Get the details of a migration job
     """
     try:
         job_details = None
         if self.storage == "device":
             job_details = self.data.get_device_migration(migration_name)
         LOG.info("Got the %s migration job details %s ", self.storage,
                  migration_name)
         LOG.debug("%s migration job details:\n%s", self.storage,
                   job_details)
         job_details = utils.serialize_content(job_details)
         return job_details
     except utils.ApiException as err:
         err_msg = ("Could not get {0} migration job {1} details due to"
                    " error: {2}".format(self.storage, migration_name,
                                         utils.error_msg(err)))
         LOG.error("%s\n%s\n", err_msg, err)
         return None
Ejemplo n.º 26
0
    def update_cgrp(self, cluster_name, cg_name, cg_patch_payload):
        """
        Update consistency group attributes
        """

        try:
            obj_cgrp = self.cgrp.patch_consistency_group(
                cluster_name, cg_name, cg_patch_payload)
            LOG.info("Final payload: %s", cg_patch_payload)
            LOG.info("Updated consistency group %s in %s", cg_name,
                     cluster_name)
            LOG.debug("Consistency group details:\n%s", obj_cgrp)
            cg_details = utils.serialize_content(obj_cgrp)
            return cg_details
        except utils.ApiException as err:
            err_msg = ("Could not update the consistency group {0} in {1} due"
                       " to error: {2}".format(cg_name, cluster_name,
                                               utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 27
0
    def update_local_device(self, cluster_name, device_name,
                            device_patch_payload):
        """
        Update device attributes
        """

        try:
            LOG.info("Final payload: %s", device_patch_payload)
            obj_device = self.device.patch_local_device(
                cluster_name, device_name, device_patch_payload)
            LOG.info("Updated device %s in %s", device_name, cluster_name)
            LOG.debug("Device details:\n%s", obj_device)
            device_details = utils.serialize_content(obj_device)
            return device_details
        except utils.ApiException as err:
            err_msg = ("Could not update the device {0} in {1} due to"
                       " error: {2}".format(device_name, cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 28
0
    def is_extent_inuse(self, cluster_name, extent_name):
        """
        Check if the extent is used by any Device
        """

        try:
            extent_details = None
            use = None
            extent_details = self.ext.get_extent(cluster_name, extent_name)
            if extent_details:
                LOG.debug("Extent details:\n%s", str(extent_details))
            use = extent_details.use
            extent_details = utils.serialize_content(extent_details)
            return (use, extent_details)

        except utils.ApiException as err:
            err_msg = ("Could not get extent details {0} of {1} due to"
                       " error: {2}".format(extent_name, cluster_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
    def update_migration_job(self, migration_name, data_patch_payload):
        """
        Update data migration job
        """

        try:
            LOG.info("Final payload: %s", data_patch_payload)
            if self.storage == "device":
                job_details = self.data.patch_device_migration(
                    migration_name, data_patch_payload)
            LOG.info("Updated the %s data migration job %s", self.storage,
                     migration_name)
            LOG.debug("%s migration job details:\n%s", self.storage,
                      job_details)
            job_details = utils.serialize_content(job_details)
            return job_details
        except utils.ApiException as err:
            err_msg = ("Could not update the migration job {0} due to"
                       " error: {1}".format(migration_name,
                                            utils.error_msg(err)))
            LOG.error("%s\n%s\n", err_msg, err)
            self.module.fail_json(msg=err_msg)
Ejemplo n.º 30
0
 def exit_module(changed, initiator_details):
     self.result["changed"] = changed
     if initiator_details:
         initiator_details = utils.serialize_content(initiator_details)
     self.result["initiator_details"] = initiator_details
     self.module.exit_json(**self.result)