def __is_cluster_already_exist(self, list_nodes):
    for node in list_nodes.itervalues():
        gluster = Gluster(node['ip'])
        peer_status = gluster.get_peer_manager().status()
        if peer_status["peers"] > 0:
            return True

    return False
 def __is_already_on_glusterfs(self):
   gluster = Gluster()
   peer_manager = gluster.get_peer_manager()
   peer_status = peer_manager.status()
   if peer_status["peers"] == 0:
       return False
   else:
       return True
 def __is_already_on_glusterfs(self):
     gluster = Gluster()
     peer_manager = gluster.get_peer_manager()
     peer_status = peer_manager.status()
     if peer_status["peers"] == 0:
         return False
     else:
         return True
    def __is_cluster_already_exist(self, list_nodes):
        for node in list_nodes.itervalues():
            gluster = Gluster(node['ip'])
            peer_status = gluster.get_peer_manager().status()
            if peer_status["peers"] > 0:
                return True

        return False
  def __create_cluster(self, list_nodes, numbers_nodes):
    gluster = Gluster()
    peer_manager = gluster.get_peer_manager()
    for node in list_nodes.itervalues():
        peer_manager.probe(node['ip'])
        print(node['name'] +  " ( " + node['ip'] + " ) " + " added on cluster")

    # I wait all node join the glusterfs before continue
    while(self.__get_numbers_peer() != numbers_nodes):
        time.sleep(1)
    def __create_cluster(self, list_nodes, numbers_nodes):
        gluster = Gluster()
        peer_manager = gluster.get_peer_manager()
        for node in list_nodes.itervalues():
            peer_manager.probe(node['ip'])
            print(node['name'] + " ( " + node['ip'] + " ) " +
                  " added on cluster")

        # I wait all node join the glusterfs before continue
        while (self.__get_numbers_peer() != numbers_nodes):
            time.sleep(1)
  def __wait_all_glusterfs_start(self, list_nodes):

      loop = True
      while loop:
        time.sleep(1)
        try:
            for node in list_nodes.itervalues():
                gluster = Gluster(node['ip'])
                peer_status = gluster.get_peer_manager().status()

            loop = False
        except Exception,e:
            loop = True
Exemple #8
0
    def __wait_all_glusterfs_start(self, list_nodes):

        loop = True
        while loop:
            time.sleep(1)
            try:
                for node in list_nodes.itervalues():
                    gluster = Gluster(node['ip'])
                    peer_status = gluster.get_peer_manager().status()

                loop = False
            except Exception, e:
                loop = True
    def __wait_all_glusterfs_start(self, list_nodes):

        loop = True
        while loop:
            time.sleep(1)
            try:
                print(str(list_nodes))
                for node in list_nodes.itervalues():
                    gluster = Gluster(node['ip'])
                    print("peer status()")
                    peer_status = gluster.get_peer_manager().status()
                loop = False
            except Exception, e:
                print(traceback.format_exc())
                print(e.message)
                loop = True
  def __wait_all_glusterfs_start(self, list_nodes):

      loop = True
      while loop:
        time.sleep(1)
        try:
            print(str(list_nodes))
            for node in list_nodes.itervalues():
                gluster = Gluster(node['ip'])
                print("peer status()")
                peer_status = gluster.get_peer_manager().status()
            loop = False
        except Exception,e:
            print(traceback.format_exc())
            print(e.message)
            loop = True
  def __create_all_volumes(self, list_volumes, transport, stripe, replica, quota, directory, list_nodes):
    gluster = Gluster()
    volume_manager = gluster.get_volume_manager()

    for volume in list_volumes:
        try:
            volume_manager.info(volume)
        except Exception,e:
            if e.message.find("Volume " + volume +" does not exist") >= 0:
                list_bricks = []
                for node in list_nodes.itervalues():
                    list_bricks.append(node['ip'] + ':' + directory + '/' + volume)
                volume_manager.create(volume, list_bricks, transport, stripe, replica, quota)
                print("Volume '" + volume + "' has been created")
            else:
                raise e
    def manage_cluster(self):
        gluster = Gluster()
        peer_manager = gluster.get_peer_manager()
        volume_manager = gluster.get_volume_manager()
        metadata_manager = MetadataAPI()

        # I check there are more than 1 container
        number_node = self.__get_numbers_of_node_in_service()

        # I get my container info
        current_container = self.__get_my_container_info()

        # I get all other containers
        list_containers = self.__get_other_container_in_service(
            current_container)

        # If I am not on cluster and there are no cluster and I am the master, so I create the gluster
        if (self.__is_already_on_glusterfs() is False) and (self._is_master(
                current_container, list_containers) is True) and (
                    self.__is_cluster_already_exist(list_containers) is False):
            self.__create_cluster(list_containers, number_node)

        # If I am already on cluster and there are new peer, I guest them.
        if (self.__is_already_on_glusterfs() is
                True) and (number_node > self.__get_numbers_peer()):

            list_nodes = {}
            peer_status = self.__get_peers()
            for container in list_containers.itervalues():
                if container['ip'] not in peer_status["host"]:
                    list_nodes[container["name"]] = container
                    print("New host : " + container["name"])

            self.__create_cluster(list_nodes, number_node)
            list_containers = list_nodes

        # I create all volumes
        if self.__is_already_on_glusterfs() is True:
            list_nodes = list_containers.copy()
            list_nodes[current_container["name"]] = current_container
            self.__create_all_volumes(self.__list_volumes, self.__transport,
                                      self.__stripe, self.__replica,
                                      self.__quota, self.__gluster_directory,
                                      list_nodes)
    def __create_all_volumes(self, list_volumes, transport, stripe, replica,
                             quota, directory, list_nodes):
        gluster = Gluster()
        volume_manager = gluster.get_volume_manager()

        for volume in list_volumes:
            try:
                volume_manager.info(volume)
            except Exception, e:
                if e.message.find("Volume " + volume + " does not exist") >= 0:
                    list_bricks = []
                    for node in list_nodes.itervalues():
                        list_bricks.append(node['ip'] + ':' + directory + '/' +
                                           volume)
                    volume_manager.create(volume, list_bricks, transport,
                                          stripe, replica, quota)
                    print("Volume '" + volume + "' has been created")
                else:
                    raise e
  def manage_cluster(self):
    gluster = Gluster()
    peer_manager = gluster.get_peer_manager()
    volume_manager = gluster.get_volume_manager()
    metadata_manager = MetadataAPI()

    # I check there are more than 1 container
    number_node = self.__get_numbers_of_node_in_service()

    # I get my container info
    current_container = self.__get_my_container_info()

    # I get all other containers
    list_containers = self.__get_other_container_in_service(current_container["name"])

    # If I am not on cluster and there are no cluster and I am the master, so I create the gluster
    if (self.__is_already_on_glusterfs() is False) and (self._is_master(current_container, list_containers) is True) and (self.__is_cluster_already_exist(list_containers) is False):
        self.__create_cluster(list_containers, number_node)



    # If I am already on cluster and there are new peer, I guest them.
    if (self.__is_already_on_glusterfs() is True) and (number_node > self.__get_numbers_peer()):

        list_nodes = {}
        peer_status = self.__get_peers()
        for container in list_containers.itervalues():
            if container['ip'] not in peer_status["host"]:
                list_nodes[container["name"]] = container
                print("New host : " + container["name"])


        self.__create_cluster(list_nodes, number_node)
        list_containers = list_nodes


    # I create all volumes
    if self.__is_already_on_glusterfs() is True:
        list_nodes = list_containers.copy()
        list_nodes[current_container["name"]] = current_container
        self.__create_all_volumes(self.__list_volumes, self.__transport, self.__stripe, self.__replica, self.__quota,self.__gluster_directory,list_nodes)
  def __get_numbers_peer(self):
    gluster = Gluster()
    peer_manager = gluster.get_peer_manager()
    peer_status = peer_manager.status()

    return peer_status["peers"]
 def __get_peers(self):
   gluster = Gluster()
   peer_manager = gluster.get_peer_manager()
   return peer_manager.status()
 def __get_peers(self):
     gluster = Gluster()
     peer_manager = gluster.get_peer_manager()
     return peer_manager.status()
    def __get_numbers_peer(self):
        gluster = Gluster()
        peer_manager = gluster.get_peer_manager()
        peer_status = peer_manager.status()

        return peer_status["peers"]