diff --git a/pkg/compute/models/scaling_policy.go b/pkg/compute/models/scaling_policy.go index 187f70c87f..e8b4911272 100644 --- a/pkg/compute/models/scaling_policy.go +++ b/pkg/compute/models/scaling_policy.go @@ -95,6 +95,13 @@ func (spm *SScalingPolicyManager) ListItemFilter(ctx context.Context, q *sqlchem return q, err } q, err = spm.SScalingGroupResourceBaseManager.ListItemFilter(ctx, q, userCred, input.ScalingGroupFilterListInput) + if err != nil { + return q, err + } + q, err = spm.SEnabledResourceBaseManager.ListItemFilter(ctx, q, userCred, input.EnabledResourceBaseListInput) + if err != nil { + return q, err + } if len(input.TriggerType) != 0 { q = q.Equals("trigger_type", input.TriggerType) } diff --git a/pkg/compute/models/scaling_trigger.go b/pkg/compute/models/scaling_trigger.go index ffdea7e8c4..e48db67027 100644 --- a/pkg/compute/models/scaling_trigger.go +++ b/pkg/compute/models/scaling_trigger.go @@ -276,6 +276,7 @@ func (st *SScalingTimer) CycleTimerDetails() api.ScalingCycleTimerDetails { Hour: st.Hour, WeekDays: st.GetWeekDays(), MonthDays: st.GetMonthDays(), + StartTime: st.StartTime, EndTime: st.EndTime, CycleType: st.Type, } diff --git a/pkg/controller/autoscaling/controller.go b/pkg/controller/autoscaling/controller.go index 254fba546b..61378bfbe6 100644 --- a/pkg/controller/autoscaling/controller.go +++ b/pkg/controller/autoscaling/controller.go @@ -38,6 +38,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" "yunion.io/x/onecloud/pkg/mcclient/modules" + "yunion.io/x/onecloud/pkg/util/httputils" "yunion.io/x/onecloud/pkg/util/logclient" ) @@ -406,10 +407,21 @@ func (asc *SASController) findSuitableInstance(sg *models.SScalingGroup, num int func (asc *SASController) createInstances(session *mcclient.ClientSession, params jsonutils.JSONObject, count int, failedList []string, succeedList []SInstance) ([]string, []SInstance) { + // forcast first + dict := params.(*jsonutils.JSONDict) + dict.Set("count", jsonutils.NewInt(int64(count))) + _, err := modules.SchedManager.DoForecast(session, dict) + if err != nil { + clientErr := err.(*httputils.JSONClientError) + failedList = append(failedList, clientErr.Details) + } + dict.Remove("count") + if count == 1 { ret, err := modules.Servers.Create(session, params) if err != nil { - failedList = append(failedList, err.Error()) + clientErr := err.(*httputils.JSONClientError) + failedList = append(failedList, clientErr.Details) return failedList, succeedList } id, _ := ret.GetString("id") diff --git a/pkg/controller/autoscaling/health_check.go b/pkg/controller/autoscaling/health_check.go index 5235329842..53107901e7 100644 --- a/pkg/controller/autoscaling/health_check.go +++ b/pkg/controller/autoscaling/health_check.go @@ -106,7 +106,7 @@ func (asc *SASController) CheckInstanceHealth(ctx context.Context, userCred mccl session := auth.GetSession(ctx, userCred, "", "") for i := range unnormalGuests { ug := unnormalGuests[i] - if ug.CreateCompleteTime.Add(time.Duration(scalingGroupMap[ug.Id].HealthCheckGov) * time.Second).After(now) { + if ug.CreateCompleteTime.Add(time.Duration(scalingGroupMap[ug.ScalngGroupId].HealthCheckGov) * time.Second).After(now) { continue } if ug.Status == apis.VM_READY {