mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
fix(region): fix cloudpods scheduler error
This commit is contained in:
@@ -75,7 +75,7 @@ func (self *SVirtualizedGuestDriver) GetNamedNetworkConfiguration(guest *models.
|
||||
})
|
||||
}
|
||||
reUse := false
|
||||
if len(netConfig.Address) > 0 && !options.Options.EnablePreAllocateIpAddr && !utils.IsInStringArray(host.GetProviderName(), []string{api.CLOUD_PROVIDER_ONECLOUD, api.CLOUD_PROVIDER_VMWARE}) {
|
||||
if len(netConfig.Address) > 0 && !options.Options.EnablePreAllocateIpAddr && !utils.IsInStringArray(host.GetProviderName(), []string{api.CLOUD_PROVIDER_ONECLOUD, api.CLOUD_PROVIDER_VMWARE, api.CLOUD_PROVIDER_CLOUDPODS}) {
|
||||
reUse = true
|
||||
}
|
||||
return net, nicConfs, api.IPAllocationStepdown, reUse, nil
|
||||
|
||||
@@ -2510,10 +2510,18 @@ func (self *SHost) GetNetworkWithId(netId string, reserved bool) (*SNetwork, err
|
||||
q2 = q2.Join(vpcs, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id")))
|
||||
q2 = q2.Join(regions, sqlchemy.Equals(regions.Field("id"), vpcs.Field("cloudregion_id")))
|
||||
q2 = q2.Filter(sqlchemy.Equals(networks.Field("id"), netId))
|
||||
q2 = q2.Filter(sqlchemy.AND(
|
||||
sqlchemy.Equals(regions.Field("provider"), api.CLOUD_PROVIDER_ONECLOUD),
|
||||
sqlchemy.NOT(sqlchemy.Equals(vpcs.Field("id"), api.DEFAULT_VPC_ID)),
|
||||
))
|
||||
q2 = q2.Filter(
|
||||
sqlchemy.OR(
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(regions.Field("provider"), api.CLOUD_PROVIDER_ONECLOUD),
|
||||
sqlchemy.NOT(sqlchemy.Equals(vpcs.Field("id"), api.DEFAULT_VPC_ID)),
|
||||
),
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(regions.Field("provider"), api.CLOUD_PROVIDER_CLOUDPODS),
|
||||
sqlchemy.NOT(sqlchemy.Equals(vpcs.Field("external_id"), api.DEFAULT_VPC_ID)),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
q := sqlchemy.Union(q1, q2).Query()
|
||||
|
||||
@@ -180,7 +180,7 @@ func (self *SHost) GetSchedtags() ([]string, error) {
|
||||
}
|
||||
|
||||
type SHostNic struct {
|
||||
api.HostwireDetails
|
||||
api.HostnetworkDetails
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetDriver() string {
|
||||
@@ -188,7 +188,7 @@ func (self *SHostNic) GetDriver() string {
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetDevice() string {
|
||||
return self.Interface
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetMac() string {
|
||||
@@ -208,24 +208,24 @@ func (self *SHostNic) GetMtu() int32 {
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetNicType() string {
|
||||
return ""
|
||||
return self.NicType
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetBridge() string {
|
||||
return self.Bridge
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SHostNic) GetIpAddr() string {
|
||||
return ""
|
||||
return self.IpAddr
|
||||
}
|
||||
|
||||
func (self *SHost) GetIHostNics() ([]cloudprovider.ICloudHostNetInterface, error) {
|
||||
nics := []SHostNic{}
|
||||
params := map[string]interface{}{
|
||||
"scope": "system",
|
||||
"host_id": self.Id,
|
||||
"details": "true",
|
||||
}
|
||||
resp, err := modules.Hostwires.List(self.zone.region.cli.s, jsonutils.Marshal(params))
|
||||
resp, err := modules.Baremetalnetworks.ListDescendent(self.zone.region.cli.s, self.Id, jsonutils.Marshal(params))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -49,7 +49,11 @@ func (self *SProject) GetStatus() string {
|
||||
|
||||
func (self *SCloudpodsClient) GetProjects() ([]SProject, error) {
|
||||
ret := []SProject{}
|
||||
return ret, self.list(&modules.Projects, nil, &ret)
|
||||
params := map[string]interface{}{
|
||||
"scope": "system",
|
||||
"limit": 1024,
|
||||
}
|
||||
return ret, self.list(&modules.Projects, params, &ret)
|
||||
}
|
||||
|
||||
func (self *SCloudpodsClient) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
@@ -38,6 +38,10 @@ func (self *SCloudpodsProviderFactory) GetName() string {
|
||||
return cloudpods.CLOUD_PROVIDER_CLOUDPODS
|
||||
}
|
||||
|
||||
func (self *SCloudpodsProviderFactory) IsNeedForceAutoCreateProject() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *SCloudpodsProviderFactory) ValidateCreateCloudaccountData(ctx context.Context, userCred mcclient.TokenCredential, input cloudprovider.SCloudaccountCredential) (cloudprovider.SCloudaccount, error) {
|
||||
ret := cloudprovider.SCloudaccount{}
|
||||
if len(input.AuthUrl) == 0 {
|
||||
|
||||
+46
@@ -303,6 +303,11 @@ func newBaseHostDesc(b *baseBuilder, host *computemodels.SHost) (*BaseHostDesc,
|
||||
return nil, fmt.Errorf("Fill onecloud vpc networks error: %v", err)
|
||||
}
|
||||
}
|
||||
if host.HostType == computeapi.HOST_TYPE_CLOUDPODS {
|
||||
if err := desc.fillCloudpodsVpcNetworks(); err != nil {
|
||||
return nil, fmt.Errorf("Fill cloudpods vpc networks error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := desc.fillZone(host); err != nil {
|
||||
return nil, fmt.Errorf("Fill zone error: %v", err)
|
||||
@@ -556,6 +561,47 @@ func (b *BaseHostDesc) fillNetworks(host *computemodels.SHost) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BaseHostDesc) fillCloudpodsVpcNetworks() error {
|
||||
nets := computemodels.NetworkManager.Query()
|
||||
wires := computemodels.WireManager.Query().SubQuery()
|
||||
vpcs := computemodels.VpcManager.Query().SubQuery()
|
||||
regions := computemodels.CloudregionManager.Query().SubQuery()
|
||||
q := nets.AppendField(nets.QueryFields()...)
|
||||
q = q.AppendField(
|
||||
vpcs.Field("id", "vpc_id"),
|
||||
regions.Field("provider"),
|
||||
)
|
||||
q = q.Join(wires, sqlchemy.Equals(wires.Field("id"), nets.Field("wire_id")))
|
||||
q = q.Join(vpcs, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id")))
|
||||
q = q.Join(regions, sqlchemy.Equals(regions.Field("id"), vpcs.Field("cloudregion_id")))
|
||||
q = q.Filter(sqlchemy.AND(
|
||||
sqlchemy.Equals(regions.Field("provider"), computeapi.CLOUD_PROVIDER_CLOUDPODS),
|
||||
sqlchemy.NOT(sqlchemy.Equals(vpcs.Field("external_id"), computeapi.DEFAULT_VPC_ID)),
|
||||
))
|
||||
|
||||
type Row struct {
|
||||
computemodels.SNetwork
|
||||
VpcId string
|
||||
Provider string
|
||||
}
|
||||
rows := []Row{}
|
||||
if err := q.All(&rows); err != nil {
|
||||
return errors.Wrap(err, "query cloudpods vpc networks")
|
||||
}
|
||||
for i := range rows {
|
||||
row := &rows[i]
|
||||
net := &row.SNetwork
|
||||
net.SetModelManager(computemodels.NetworkManager, net)
|
||||
candidateNet := &api.CandidateNetwork{
|
||||
SNetwork: net,
|
||||
VpcId: row.VpcId,
|
||||
Provider: row.Provider,
|
||||
}
|
||||
b.Networks = append(b.Networks, candidateNet)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BaseHostDesc) fillOnecloudVpcNetworks() error {
|
||||
nets := computemodels.NetworkManager.Query()
|
||||
wires := computemodels.WireManager.Query().SubQuery()
|
||||
|
||||
Reference in New Issue
Block a user