mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
Merge pull request #9352 from zexi/bugfix/scheduler-sku-net
Bugfix/scheduler SKU net
This commit is contained in:
@@ -45,13 +45,25 @@ func (p *InstanceTypePredicate) Execute(u *core.Unit, c core.Candidater) (bool,
|
||||
|
||||
d := u.SchedData()
|
||||
|
||||
regionId := c.Getter().Region().Id
|
||||
regionName := c.Getter().Region().Name
|
||||
zoneId := c.Getter().Zone().Id
|
||||
zoneName := c.Getter().Zone().Name
|
||||
instanceType := d.InstanceType
|
||||
|
||||
sku := skuman.GetByZone(instanceType, zoneId)
|
||||
if sku == nil {
|
||||
h.Exclude(fmt.Sprintf("Not found server sku %s at zone %s", instanceType, zoneName))
|
||||
reqRegion := d.PreferRegion
|
||||
reqZone := d.PreferZone
|
||||
|
||||
if reqRegion != "" && reqZone == "" {
|
||||
sku := skuman.GetByRegion(instanceType, regionId)
|
||||
if sku == nil {
|
||||
h.Exclude(fmt.Sprintf("Not found server sku %s at region %s", instanceType, regionName))
|
||||
}
|
||||
} else {
|
||||
sku := skuman.GetByZone(instanceType, zoneId)
|
||||
if sku == nil {
|
||||
h.Exclude(fmt.Sprintf("Not found server sku %s at zone %s", instanceType, zoneName))
|
||||
}
|
||||
}
|
||||
|
||||
return h.GetResult()
|
||||
|
||||
+5
-2
@@ -281,8 +281,11 @@ func newBaseHostDesc(b *baseBuilder, host *computemodels.SHost) (*BaseHostDesc,
|
||||
if err := desc.fillNetworks(host); err != nil {
|
||||
return nil, fmt.Errorf("Fill networks error: %v", err)
|
||||
}
|
||||
if err := desc.fillOnecloudVpcNetworks(); err != nil {
|
||||
return nil, fmt.Errorf("Fill onecloud vpc networks error: %v", err)
|
||||
// only onecloud host should fill onecloud vpc networks
|
||||
if host.HostType == computeapi.HOST_TYPE_HYPERVISOR {
|
||||
if err := desc.fillOnecloudVpcNetworks(); err != nil {
|
||||
return nil, fmt.Errorf("Fill onecloud vpc networks error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := desc.fillZone(host); err != nil {
|
||||
|
||||
@@ -56,14 +56,19 @@ func GetByZone(instanceType, zoneId string) *ServerSku {
|
||||
return skuManager.GetByZone(instanceType, zoneId)
|
||||
}
|
||||
|
||||
func GetByRegion(instanceType, regionId string) *ServerSku {
|
||||
return skuManager.GetByRegion(instanceType, regionId)
|
||||
}
|
||||
|
||||
type skuMap struct {
|
||||
*sync.Map
|
||||
}
|
||||
|
||||
type ServerSku struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ZoneId string `json:"zone_id"`
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
RegionId string `json:"cloudregion_id"`
|
||||
ZoneId string `json:"zone_id"`
|
||||
}
|
||||
|
||||
type skuList []*ServerSku
|
||||
@@ -81,6 +86,15 @@ func (l skuList) DebugString() string {
|
||||
return fmt.Sprintf("%s", jsonutils.Marshal(l).String())
|
||||
}
|
||||
|
||||
func (l skuList) GetByRegion(regionId string) *ServerSku {
|
||||
for _, s := range l {
|
||||
if s.RegionId == regionId {
|
||||
return s
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l skuList) GetByZone(zoneId string) *ServerSku {
|
||||
for _, s := range l {
|
||||
if s.ZoneId == zoneId {
|
||||
@@ -124,7 +138,7 @@ func (m *SSkuManager) syncOnce() {
|
||||
startTime := time.Now()
|
||||
|
||||
skus := make([]ServerSku, 0)
|
||||
q := models.ServerSkuManager.Query("id", "name", "zone_id")
|
||||
q := models.ServerSkuManager.Query("id", "name", "cloudregion_id", "zone_id")
|
||||
q = q.Filter(
|
||||
sqlchemy.OR(
|
||||
sqlchemy.Equals(q.Field("prepaid_status"), computeapi.SkuStatusAvailable),
|
||||
@@ -152,3 +166,11 @@ func (m *SSkuManager) GetByZone(instanceType, zoneId string) *ServerSku {
|
||||
}
|
||||
return l.GetByZone(zoneId)
|
||||
}
|
||||
|
||||
func (m *SSkuManager) GetByRegion(instanceType, regionId string) *ServerSku {
|
||||
l := m.skuMap.Get(instanceType)
|
||||
if l == nil {
|
||||
return nil
|
||||
}
|
||||
return l.GetByRegion(regionId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user