def _check_controllers_count(cls, task): cluster = task.cluster min_controllers = objects.Release.get_min_controller_count( cluster.release) controllers = objects.Cluster.get_nodes_by_role( task.cluster, 'controller') # we should make sure that cluster has at least one controller if len(controllers) < min_controllers: raise errors.NotEnoughControllers( "Not enough controllers, %s mode requires at least %s " "controller(s)" % (cluster.mode, min_controllers)) if cluster.status in (consts.CLUSTER_STATUSES.operational, consts.CLUSTER_STATUSES.error, consts.CLUSTER_STATUSES.update_error): # get a list of deployed controllers - which are going # don't to be changed deployed_controllers = filter( lambda node: all([ node.pending_addition is False, node.pending_deletion is False ]), controllers) # we should fail in case of user remove all controllers and add # new in one task, since that's affect cluster's availability if not deployed_controllers: raise errors.NotEnoughControllers( "Not enough deployed controllers - deployed cluster " "requires at least 1 deployed controller.")
def __check_controllers_count(cls, task): controllers_count = len( filter(lambda node: node.role == 'controller', task.cluster.nodes)) cluster_mode = task.cluster.mode if cluster_mode == 'multinode' and controllers_count < 1: raise errors.NotEnoughControllers( "Not enough controllers, %s mode requires at least 1 " "controller" % (cluster_mode)) elif cluster_mode == 'ha' and controllers_count < 3: raise errors.NotEnoughControllers( "Not enough controllers, %s mode requires at least 3 " "controllers" % (cluster_mode))