コード例 #1
0
ファイル: resources.go プロジェクト: latam-airlines/crane
func (c *Resources) checkResources(cluster core.ClusterInterface, service framework.ServiceConfig) error {
	requiredInstances, err := c.requiredInstances(cluster, service)
	if err != nil {
		return err
	}

	if requiredInstances == 0 {
		return nil
	}

	slaves, err := cluster.Slaves()
	if err != nil {
		return err
	}

	allowedInstances := 0
	for _, v := range slaves {
		allowed := v.AllowedInstances(service.CPUShares, float64(service.Memory))
		logger.Instance().Infof("Checking slave %s - Available CPU %f Mem %f - Allowed instances %d", v.Hostname, v.AvailableCpu(), v.AvailableMem(), allowed)
		if allowed > 0 {
			allowedInstances += allowed
		}
	}

	if allowedInstances < requiredInstances {
		return fmt.Errorf("Cluster %s doesn't have enough resources. It only accept %d instances.", cluster.Id(), allowedInstances)
	}
	logger.Instance().Infof("Checking Resources in cluster %s done", cluster.Id())

	return nil
}