Beispiel #1
0
    def create_pvc_pod(self, rbd_sc_obj, cephfs_sc_obj, number_of_pvc, size,
                       start_io):
        """
        Function to create multiple PVC of different type and created pods on them.

        Args:
            rbd_sc_obj (obj_dict): rbd storageclass object
            cephfs_sc_obj (obj_dict): cephfs storageclass object
            number_of_pvc (int): pvc count to be created for each types
            size (str): size of each pvc to be created eg: '10Gi'
            start_io (boolean): Ture to start and False not to start IO
        """
        log.info(f"Create {number_of_pvc} pvcs and pods")
        self.delete_pod_count = round(number_of_pvc / 2)
        cephfs_pvcs = helpers.create_multiple_pvc_parallel(
            cephfs_sc_obj,
            self.namespace,
            number_of_pvc,
            size,
            access_modes=[
                constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX
            ],
        )
        rbd_pvcs = helpers.create_multiple_pvc_parallel(
            rbd_sc_obj,
            self.namespace,
            number_of_pvc,
            size,
            access_modes=[
                constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX
            ],
        )
        # Appending all the pvc obj to base case param for cleanup and evaluation
        self.all_pvc_obj.extend(cephfs_pvcs + rbd_pvcs)

        # Create pods with above pvc list
        cephfs_pods = helpers.create_pods_parallel(cephfs_pvcs, self.namespace,
                                                   constants.CEPHFS_INTERFACE)
        rbd_rwo_pvc, rbd_rwx_pvc = ([] for i in range(2))
        for pvc_obj in rbd_pvcs:
            if pvc_obj is not None:
                if type(pvc_obj) is list:
                    for pvc_ in pvc_obj:
                        if pvc_.get_pvc_access_mode == constants.ACCESS_MODE_RWX:
                            rbd_rwx_pvc.append(pvc_)
                        else:
                            rbd_rwo_pvc.append(pvc_)
                else:

                    if pvc_obj.get_pvc_access_mode == constants.ACCESS_MODE_RWX:
                        rbd_rwx_pvc.append(pvc_obj)
                    else:
                        rbd_rwo_pvc.append(pvc_obj)

        rbd_rwo_pods = helpers.create_pods_parallel(rbd_rwo_pvc,
                                                    self.namespace,
                                                    constants.CEPHBLOCKPOOL)
        rbd_rwx_pods = helpers.create_pods_parallel(rbd_rwx_pvc,
                                                    self.namespace,
                                                    constants.CEPHBLOCKPOOL,
                                                    raw_block_pv=True)
        temp_pod_objs = list()
        temp_pod_objs.extend(cephfs_pods + rbd_rwo_pods)
        # Appending all the pod obj to base case param for cleanup and evaluation
        self.all_pod_obj.extend(temp_pod_objs + rbd_rwx_pods)

        # IO will start based on TC requirement
        if start_io:
            threads = list()
            for pod_obj in temp_pod_objs:
                process = threading.Thread(
                    target=pod_obj.run_io,
                    args=(
                        "fs",
                        "512M",
                    ),
                )
                process.start()
                threads.append(process)
            for pod_obj in rbd_rwx_pods:
                process = threading.Thread(
                    target=pod_obj.run_io,
                    args=(
                        "block",
                        "512M",
                    ),
                )
                process.start()
                threads.append(process)
            for process in threads:
                process.join()
Beispiel #2
0
    def create_multi_pvc_pod(self,
                             pods_per_iter=5,
                             io_runtime=3600,
                             start_io=False,
                             pvc_size=None):
        """
        Function to create PVC of different type and attach them to PODs and start IO.

        Args:
            pods_per_iter (int): Number of PVC-POD to be created per PVC type
            Example, If 2 then 8 PVC+POD will be created with 2 each of 4 PVC types
            io_runtime (sec): Fio run time in seconds
            start_io (bool): If True start IO else don't
            pvc_size (Gi): size of PVC

        Returns:
            pod_objs (obj): Objs of all the PODs created
            pvc_objs (obj): Objs of all the PVCs created

        """
        rbd_sc = helpers.default_storage_class(constants.CEPHBLOCKPOOL)
        cephfs_sc = helpers.default_storage_class(constants.CEPHFILESYSTEM)
        pvc_size = pvc_size or f"{random.randrange(15, 105, 5)}Gi"
        fio_size = get_size_based_on_cls_usage()
        fio_rate = get_rate_based_on_cls_iops()
        logging.info(f"Create {pods_per_iter * 4} PVCs and PODs")
        # Create PVCs
        cephfs_pvcs = helpers.create_multiple_pvc_parallel(
            sc_obj=cephfs_sc,
            namespace=self.namespace,
            number_of_pvc=pods_per_iter,
            size=pvc_size,
            access_modes=[
                constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX
            ],
        )
        rbd_pvcs = helpers.create_multiple_pvc_parallel(
            sc_obj=rbd_sc,
            namespace=self.namespace,
            number_of_pvc=pods_per_iter,
            size=pvc_size,
            access_modes=[
                constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX
            ],
        )

        # Appending all the pvc_obj and pod_obj to list
        pvc_objs, pod_objs = ([] for i in range(2))
        pvc_objs.extend(cephfs_pvcs + rbd_pvcs)

        # Create pods with above pvc list
        cephfs_pods = helpers.create_pods_parallel(
            cephfs_pvcs,
            self.namespace,
            constants.CEPHFS_INTERFACE,
            pod_dict_path=self.pod_dict_path,
            sa_name=self.sa_name,
            dc_deployment=self.dc_deployment,
            node_selector=self.node_selector,
        )
        rbd_rwo_pvc, rbd_rwx_pvc = ([] for i in range(2))
        for pvc_obj in rbd_pvcs:
            if pvc_obj.get_pvc_access_mode == constants.ACCESS_MODE_RWX:
                rbd_rwx_pvc.append(pvc_obj)
            else:
                rbd_rwo_pvc.append(pvc_obj)
        rbd_rwo_pods = helpers.create_pods_parallel(
            rbd_rwo_pvc,
            self.namespace,
            constants.CEPHBLOCKPOOL,
            pod_dict_path=self.pod_dict_path,
            sa_name=self.sa_name,
            dc_deployment=self.dc_deployment,
            node_selector=self.node_selector,
        )
        rbd_rwx_pods = helpers.create_pods_parallel(
            rbd_rwx_pvc,
            self.namespace,
            constants.CEPHBLOCKPOOL,
            pod_dict_path=self.pod_dict_path,
            sa_name=self.sa_name,
            dc_deployment=self.dc_deployment,
            raw_block_pv=True,
            node_selector=self.node_selector,
        )
        temp_pod_objs = list()
        temp_pod_objs.extend(cephfs_pods + rbd_rwo_pods)

        # Appending all the pod_obj to list
        pod_objs.extend(temp_pod_objs + rbd_rwx_pods)

        # Start IO
        if start_io:
            threads = list()
            for pod_obj in temp_pod_objs:
                process = threading.Thread(
                    target=pod_obj.run_io,
                    kwargs={
                        "storage_type": "fs",
                        "size": fio_size,
                        "runtime": io_runtime,
                        "rate": fio_rate,
                    },
                )
                process.start()
                threads.append(process)
                time.sleep(30)
            for pod_obj in rbd_rwx_pods:
                process = threading.Thread(
                    target=pod_obj.run_io,
                    kwargs={
                        "storage_type": "block",
                        "size": fio_size,
                        "runtime": io_runtime,
                        "rate": fio_rate,
                    },
                )
                process.start()
                threads.append(process)
                time.sleep(30)
            for process in threads:
                process.join()

        return pod_objs, pvc_objs
    def create_pvc_pod(self, rbd_sc_obj, cephfs_sc_obj, number_of_pvc, size):
        """
        Function to create multiple PVC of different type and bind mount them to pods

        Args:
            rbd_sc_obj (obj_dict): rbd storageclass object
            cephfs_sc_obj (obj_dict): cephfs storageclass object
            number_of_pvc (int): pvc count to be created for each types
            size (str): size of each pvc to be created eg: '10Gi'
        """
        log.info(f"Create {number_of_pvc} pvcs and pods")
        cephfs_pvcs = helpers.create_multiple_pvc_parallel(
            cephfs_sc_obj,
            self.namespace,
            number_of_pvc,
            size,
            access_modes=[constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX],
        )
        rbd_pvcs = helpers.create_multiple_pvc_parallel(
            rbd_sc_obj,
            self.namespace,
            number_of_pvc,
            size,
            access_modes=[constants.ACCESS_MODE_RWO, constants.ACCESS_MODE_RWX],
        )
        # Appending all the pvc obj to base case param for cleanup and evaluation
        self.all_pvc_obj.extend(cephfs_pvcs + rbd_pvcs)

        # Create pods with above pvc list
        cephfs_pods = helpers.create_pods_parallel(
            cephfs_pvcs, self.namespace, constants.CEPHFS_INTERFACE
        )
        rbd_rwo_pvc, rbd_rwx_pvc = ([] for i in range(2))
        for pvc_obj in rbd_pvcs:
            if pvc_obj.get_pvc_access_mode == constants.ACCESS_MODE_RWX:
                rbd_rwx_pvc.append(pvc_obj)
            else:
                rbd_rwo_pvc.append(pvc_obj)
        rbd_rwo_pods = helpers.create_pods_parallel(
            rbd_rwo_pvc, self.namespace, constants.CEPHBLOCKPOOL
        )
        rbd_rwx_pods = helpers.create_pods_parallel(
            rbd_rwx_pvc, self.namespace, constants.CEPHBLOCKPOOL, raw_block_pv=True
        )
        temp_pod_objs = list()
        temp_pod_objs.extend(cephfs_pods + rbd_rwo_pods)
        # Appending all the pod obj to base class param for cleanup and evaluation
        self.all_pod_obj.extend(temp_pod_objs + rbd_rwx_pods)

        # Start respective IO on all the created PODs
        threads = list()
        for pod_obj in temp_pod_objs:
            process = threading.Thread(
                target=pod_obj.run_io,
                args=(
                    "fs",
                    "512M",
                ),
            )
            process.start()
            threads.append(process)
        for pod_obj in rbd_rwx_pods:
            process = threading.Thread(
                target=pod_obj.run_io,
                args=(
                    "block",
                    "512M",
                ),
            )
            process.start()
            threads.append(process)
        for process in threads:
            process.join()