Esempio n. 1
0
    def remove(self, args):
        """
            remove node in some cluster
        """

        cluster = args.get('containerClusterName')
        if not cluster:
            raise UserVisiableException(
                'params containerClusterName not be given, please check the params!'
            )
        containers = args.get('containerNameList')
        if not containers:
            raise UserVisiableException(
                'params containerNameList not be given, please check the params!'
            )

        _containers = containers.split(',')

        zkOper = Container_ZkOpers()
        exists = zkOper.check_containerCluster_exists(cluster)
        if not exists:
            raise UserVisiableException(
                'containerCluster %s not existed, no need to remove' % cluster)

        containerCluster_remove_node_action = ContainerCluster_RemoveNode_Action(
            cluster, _containers)
        containerCluster_remove_node_action.start()
Esempio n. 2
0
    def add(self, args):
        cluster = args.get('containerClusterName', None)
        if not cluster:
            raise UserVisiableException(
                'params containerClusterName not be given, please check the params!'
            )
        node_count = args.get('nodeCount')
        if not node_count:
            raise UserVisiableException(
                'params nodeCount not be given, please check the params!')
        if not args.has_key('networkMode'):
            raise UserVisiableException(
                'params networkMode not be given, please check the params!')
        component_type = args.get('componentType', None)
        if not component_type:
            raise UserVisiableException(
                'params componentType not be given, please check the params!')

        zkOper = Container_ZkOpers()
        exists = zkOper.check_containerCluster_exists(cluster)
        if not exists:
            raise UserVisiableException(
                'cluster %s not exist, you should give a existed cluster when add node to it!'
                % cluster)

        container_names = self.container_opers.generate_container_names(
            component_type, node_count, cluster)
        args.setdefault('container_names', container_names)
        containerCluster_create_action = ContainerCluster_Add_Action(args)
        containerCluster_create_action.start()
        return container_names
Esempio n. 3
0
    def create(self, params):
        if params == {} or params is None:
            raise UserVisiableException("please set the componentNode info!")

        dataNodeInternalPort = params.get('dataNodeInternalPort')
        if dataNodeInternalPort is not None:
            raise UserVisiableException(
                "no need to set the dataNodeInternalPort param!")

        zkOper = Common_ZkOpers()

        local_uuid = getClusterUUID()
        existCluster = zkOper.existCluster(local_uuid)
        if not existCluster:
            raise UserVisiableException(
                "sync componentCluster info error! please check if sync uuid is right!"
            )

        params.setdefault("dataNodeInternalPort", options.port)
        dataNodeExternalPort = params.get('dataNodeExternalPort')
        if dataNodeExternalPort is None or '' == dataNodeExternalPort:
            params.setdefault("dataNodeExternalPort", options.port)

        self.confOpers.setValue(options.data_node_property, params)
        dataNodeProprs = self.confOpers.getValue(options.data_node_property)
        zkOper.writeDataNodeInfo(local_uuid, dataNodeProprs)

        result = {}
        result.setdefault(
            "message",
            "Configuration on this componentNode has been done successfully")
        return result
Esempio n. 4
0
    def start(self):
        zkOper = Common_ZkOpers()

        existCluster = zkOper.existCluster()
        if not existCluster:
            raise UserVisiableException("Nginx componentCluster does't exist")

        total_nginx_nodes = zkOper.retrieve_nginx_node_list()
        started_nodes = zkOper.retrieve_started_nodes()
        if len(total_nginx_nodes) == len(started_nodes):
            raise UserVisiableException(
                "all nginx nodes have started. No need to start them.")

        logging.info("all nginx nodes: %s" % (total_nginx_nodes))
        to_start_nginx_nodes = list(
            set(total_nginx_nodes) - set(started_nodes))
        logging.info("nginx needed to start: " + str(to_start_nginx_nodes))

        node_infos = []
        for node in to_start_nginx_nodes:
            info = zkOper.retrieve_nginx_node_info(node)
            node_infos.append(info)

        self.baseOpers(node_infos, OperType.start)

        result_dict = {
            'message': 'cluster start processing, please wait for a moment!'
        }
        return result_dict
Esempio n. 5
0
    def destory(self, containerClusterName):
        if not containerClusterName:
            raise UserVisiableException('no containerClusterName param')

        zkOper = Container_ZkOpers()
        exists = zkOper.check_containerCluster_exists(containerClusterName)
        if not exists:
            raise UserVisiableException(
                'containerCluster %s not existed, no need to remove' %
                containerClusterName)

        containerCluster_destroy_action = ContainerCluster_destroy_Action(
            containerClusterName)
        containerCluster_destroy_action.start()
Esempio n. 6
0
    def set_container_cpuset(self, args):

        container_name = args.get('containerName')
        exists = self.check_container_exists(container_name)
        if not exists:
            raise UserVisiableException("container(name:%s) dont's existed!" %
                                        (container_name))
        cpus = args.get('cpus')
        if not cpus:
            raise UserVisiableException("params cpus should be given!")

        add_ret = {}
        state_opers = StateOpers(container_name)
        cpuset_value = state_opers.set_cpuset(cpus)
        add_ret.setdefault(container_name, cpuset_value)
Esempio n. 7
0
    def create_result(self, containerClusterName, container_names=[]):
        create_successful = {'code': "000000"}
        creating = {'code': "000001"}
        create_failed = {'code': "000002", 'status': Status.create_failed}

        zkOper = Requests_ZkOpers()
        exists = zkOper.check_containerCluster_exists(containerClusterName)
        if not exists:
            raise UserVisiableException('containerCluster %s not existed' %
                                        containerClusterName)

        result = {}

        container_cluster_info = zkOper.retrieve_container_cluster_info(
            containerClusterName)
        start_flag = container_cluster_info.get('start_flag')

        if start_flag == Status.failed:
            result.update(create_failed)
            result.setdefault('error_msg', 'create containers failed!')

        elif start_flag == Status.succeed:
            create_info = self.__created_info(containerClusterName,
                                              container_names)
            result.update(create_successful)
            result.update(create_info)
        else:
            result.update(creating)
        return result
Esempio n. 8
0
    def statistic(self):
        if not re.match("\d+\:\d+", self.dev_number):
            raise UserVisiableException('get device number wrong :%s' % self.dev_number)

        _file = self.file % self._container_id
        with open_with_error(_file) as (f, err):
            if not err:
                content = f.read()
            else:
                logging.error(err)
                return

        _read, _write = 0, 0
        _readpattern = '%s Read (\d+ ?)' % self.dev_number
        _writepattern = '%s Write (\d+ ?)' % self.dev_number
        if re.search(_readpattern, content) and \
           re.search(_writepattern, content):
            _read = re.findall(_readpattern, content)[0]
            _read = int(_read)
            _write = re.findall(_writepattern, content)[0]
            _write = int(_write)

        if self._total_read_bytes and self._total_write_bytes:
            self._read_iops = (_read - self._total_read_bytes)/options.container_gather_duration
            self._write_iops = (_write - self._total_write_bytes)/options.container_gather_duration

        self._total_read_bytes = _read
        self._total_write_bytes = _write
Esempio n. 9
0
    def create(self, args):
        require_args = ('containerClusterName', 'networkMode', 'componentType')
        for arg in require_args:
            if not args.get(arg):
                raise UserVisiableException(
                    'Params %s invalid or not be given!' % arg)

        cluster_name = args.get('containerClusterName', None)
        zkOper = Container_ZkOpers()
        exists = zkOper.check_containerCluster_exists(cluster_name)
        if exists:
            raise UserVisiableException(
                'containerCluster %s has existed, choose another containerCluster name'
                % cluster_name)

        containerCluster_create_action = ContainerCluster_create_Action(args)
        containerCluster_create_action.start()
Esempio n. 10
0
 def __extend_memsw(self, times):
     memsw_value = self.get_con_limit_memsw()
     extend_value = int(memsw_value) * int(times)
     if not self.echo_value_to_file(extend_value, self.limit_memsw_path):
         raise UserVisiableException(
             'extend container: %s memroy swap faild, please check!' %
             self.container_name)
     return extend_value
Esempio n. 11
0
    def set_container_cpushares(self, args):

        container_name = args.get('containerName')
        exists = self.check_container_exists(container_name)
        if not exists:
            raise UserVisiableException("container(name:%s) dont's existed!" %
                                        container_name)
        times = args.get('times')
        if not times:
            raise UserVisiableException("params times should be given!")

        add_ret = {}
        cpushares = 1024 * eval(times)
        state_opers = StateOpers(container_name)
        cpushares_value = state_opers.set_cpushares(int(cpushares))
        add_ret.setdefault(container_name, cpushares_value)

        return add_ret
Esempio n. 12
0
    def syncExistedCluster(self, params):
        if params == {}:
            error_message = "please fill the cluster uuid!"
            raise UserVisiableException(error_message)

        clusterUUID = params['clusterUUID']
        zkOper = Common_ZkOpers()

        existCluster = zkOper.existCluster(clusterUUID)
        if not existCluster:
            error_message = "Nginx componentCluster does't exist(cluster id:%s), \
                 please specify the right cluster uuid!" % (clusterUUID)
            raise UserVisiableException(error_message)

        data, _ = zkOper.retrieveClusterProp(clusterUUID)
        logging.info("data in zk %s" % (data))
        json_str_data = data.replace("'", "\"")
        dict_data = json.loads(json_str_data)
        self.confOpers.setValue(options.cluster_property, dict_data)
Esempio n. 13
0
    def check(self, containerClusterName):
        zkOper = Requests_ZkOpers()
        exists = zkOper.check_containerCluster_exists(containerClusterName)
        if not exists:
            raise UserVisiableException('containerCluster %s not existed' %
                                        containerClusterName)

        cluster_status = self.component_container_cluster_validator.container_cluster_status_validator(
            containerClusterName)
        return cluster_status
Esempio n. 14
0
    def stop(self, containerClusterName):
        zkOper = Container_ZkOpers()
        exists = zkOper.check_containerCluster_exists(containerClusterName)
        if not exists:
            raise UserVisiableException(
                'containerCluster %s not existed, choose another containerCluster name'
                % containerClusterName)

        containerCluster_stop_action = ContainerCluster_stop_Action(
            containerClusterName)
        containerCluster_stop_action.start()
Esempio n. 15
0
 def open_containers_under_oom(self, container_name_list):
     result = {}
     containers = self._get_containers(container_name_list)
     for container in containers:
         conl = StateOpers(container)
         ret = conl.open_container_under_oom()
         if not ret:
             raise UserVisiableException(
                 'container %s under oom value open failed' % container)
         result.setdefault(container, ret)
     return result
Esempio n. 16
0
    def createCluster(self, params):
        if params == {} or params is None:
            raise UserVisiableException("please set the componentNode info!")

        dataNodeInternalPort = params.get('dataNodeInternalPort')
        if dataNodeInternalPort:
            raise UserVisiableException(
                "no need to set the dataNodeInternalPort param!")

        zkOper = ZkOpers()

        try:
            existCluster = zkOper.existCluster()

            if existCluster:
                raise UserVisiableException(
                    "server has belong to a componentCluster,should be not create new componentCluster!"
                )

            clusterUUID = str(uuid.uuid1())
            params.setdefault("clusterUUID", clusterUUID)

            params.setdefault("dataNodeInternalPort", options.port)
            dataNodeExternalPort = params.get('dataNodeExternalPort')
            if dataNodeExternalPort is None or '' == dataNodeExternalPort:
                params.setdefault("dataNodeExternalPort", options.port)

            self.confOpers.setValue(options.cluster_property, params)
            self.confOpers.setValue(options.data_node_property, params)

            clusterProps = self.confOpers.getValue(options.cluster_property)
            dataNodeProprs = self.confOpers.getValue(
                options.data_node_property)

            zkOper.writeClusterInfo(clusterUUID, clusterProps)
            zkOper.writeDataNodeInfo(clusterUUID, dataNodeProprs)
        finally:
            zkOper.close()

        return clusterUUID
Esempio n. 17
0
 def set_containers_disk_bps(self,
                             container_name_list,
                             container_type,
                             method='write',
                             data=0):
     result = {}
     containers = self._get_containers(container_name_list)
     for container in containers:
         stat_op = StateOpers(container)
         ret = stat_op.set_container_disk_bps(container_type, method, data)
         if not ret:
             raise UserVisiableException(
                 'container %s set disk bps failed' % container)
         result.setdefault(container, {'bps': ret})
     return result
Esempio n. 18
0
    def check(self, container_name):
        exists = self.check_container_exists(container_name)
        if not exists:
            raise UserVisiableException("container(name:%s) dont's existed!" %
                                        (container_name))

        container_operation_record = self.retrieve_container_status_from_containerName(
            container_name)
        status = container_operation_record.get('status')
        message = container_operation_record.get('message')

        result = {}
        result.setdefault('status', status)
        result.setdefault('message', message)
        return result
Esempio n. 19
0
    def stop(self):
        zkOper = Common_ZkOpers()
        node_infos = []

        started_nodes_list = zkOper.retrieve_started_nodes()
        if not started_nodes_list:
            raise UserVisiableException(
                'cluster has been stopped, no need to do this!')

        for nginx_node in started_nodes_list:
            info = zkOper.retrieve_nginx_node_info(nginx_node)
            node_infos.append(info)

        self.baseOpers(node_infos, OperType.stop)
        result_dict = {
            'message': 'cluster stop processing, please wait for a moment!'
        }
        return result_dict
Esempio n. 20
0
    def disable(self):
        zkOper = Common_ZkOpers()
        node_infos = []

        _nodes_list = zkOper.retrieve_nginx_node_list()
        if not _nodes_list:
            raise UserVisiableException(
                "cluster has not node, please check the cluster's node!")

        for _node in _nodes_list:
            info = zkOper.retrieve_nginx_node_info(_node)
            node_infos.append(info)

        self.baseOpers(node_infos, OperType.disable)
        result_dict = {
            'message':
            'cluster proxy disable processing, please wait for a moment!'
        }
        return result_dict
Esempio n. 21
0
    def __created_info(self, cluster, container_names=[]):
        zkOper = Requests_ZkOpers()
        message_list, container_nodes = [], []
        if container_names:
            for container_name in container_names:
                container_node = self.container_opers.get_container_node_from_container_name(
                    cluster, container_name)
                if not container_node:
                    raise UserVisiableException('container :%s not existed' %
                                                container_name)
                container_nodes.append(container_node)
        else:
            container_nodes = zkOper.retrieve_container_list(cluster)

        result = {}
        for container_node in container_nodes:
            container_node_value = zkOper.retrieve_container_node_value(
                cluster, container_node)
            con = Container_Model()
            create_info = con.create_info(container_node_value)
            message_list.append(create_info)
        result.setdefault('containers', message_list)
        return result
Esempio n. 22
0
 def set_cpuset(self, cpus):
     if not self.echo_value_to_file(cpus, self.cpuset_path):
         raise UserVisiableException(
             'set container :%s cpus value:%s failed' %
             (self.container_name, cpus))
     return self.get_cpuset_value()
Esempio n. 23
0
 def set_cpushares(self, cpushares="1024"):
     if not self.echo_value_to_file(cpushares, self.cpushares_path):
         raise UserVisiableException(
             'set container :%s cpu.shares value:% failed' %
             (self.container_name, cpushares))
     return self.get_cpushares_value()