sync classic redis fix

This commit is contained in:
tangbin
2020-07-16 20:25:16 +08:00
parent bea60df494
commit b9a45c8bb2
4 changed files with 45 additions and 25 deletions
+38 -18
View File
@@ -566,7 +566,6 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex
instance.Engine = extInstance.GetEngine()
instance.EngineVersion = extInstance.GetEngineVersion()
instance.NetworkType = extInstance.GetNetworkType()
instance.PrivateDNS = extInstance.GetPrivateDNS()
instance.PrivateIpAddr = extInstance.GetPrivateIpAddr()
instance.PrivateConnectPort = extInstance.GetPrivateConnectPort()
@@ -577,36 +576,57 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex
instance.MaintainEndTime = extInstance.GetMaintainEndTime()
instance.AuthMode = extInstance.GetAuthMode()
var zone *SZone
if zoneId := extInstance.GetZoneId(); len(zoneId) > 0 {
zone, err := db.FetchByExternalId(ZoneManager, zoneId)
_zone, err := db.FetchByExternalId(ZoneManager, zoneId)
if err != nil {
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchZoneId")
}
instance.ZoneId = zone.GetId()
instance.ZoneId = _zone.GetId()
zone = _zone.(*SZone)
}
if vpcId := extInstance.GetVpcId(); len(vpcId) > 0 {
vpc, err := db.FetchByExternalIdAndManagerId(VpcManager, vpcId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
return q.Equals("manager_id", provider.Id)
})
instance.NetworkType = extInstance.GetNetworkType()
if instance.NetworkType == api.LB_NETWORK_TYPE_CLASSIC {
vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, region)
if err != nil {
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchVpcId")
return nil, errors.Wrap(err, "NewVpcForClassicNetwork")
}
instance.VpcId = vpc.GetId()
}
if networkId := extInstance.GetNetworkId(); len(networkId) > 0 {
network, err := db.FetchByExternalIdAndManagerId(NetworkManager, networkId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
wire := WireManager.Query().SubQuery()
vpc := VpcManager.Query().SubQuery()
return q.Join(wire, sqlchemy.Equals(wire.Field("id"), q.Field("wire_id"))).
Join(vpc, sqlchemy.Equals(vpc.Field("id"), wire.Field("vpc_id"))).
Filter(sqlchemy.Equals(vpc.Field("manager_id"), provider.Id))
})
wire, err := WireManager.GetOrCreateWireForClassicNetwork(ctx, vpc, zone)
if err != nil {
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchNetworkId")
return nil, errors.Wrap(err, "NewWireForClassicNetwork")
}
network, err := NetworkManager.GetOrCreateClassicNetwork(ctx, wire)
if err != nil {
return nil, errors.Wrap(err, "GetOrCreateClassicNetwork")
}
instance.NetworkId = network.GetId()
} else {
if vpcId := extInstance.GetVpcId(); len(vpcId) > 0 {
vpc, err := db.FetchByExternalIdAndManagerId(VpcManager, vpcId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
return q.Equals("manager_id", provider.Id)
})
if err != nil {
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchVpcId")
}
instance.VpcId = vpc.GetId()
}
if networkId := extInstance.GetNetworkId(); len(networkId) > 0 {
network, err := db.FetchByExternalIdAndManagerId(NetworkManager, networkId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
wire := WireManager.Query().SubQuery()
vpc := VpcManager.Query().SubQuery()
return q.Join(wire, sqlchemy.Equals(wire.Field("id"), q.Field("wire_id"))).
Join(vpc, sqlchemy.Equals(vpc.Field("id"), wire.Field("vpc_id"))).
Filter(sqlchemy.Equals(vpc.Field("manager_id"), provider.Id))
})
if err != nil {
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchNetworkId")
}
instance.NetworkId = network.GetId()
}
}
if createdAt := extInstance.GetCreatedAt(); !createdAt.IsZero() {
+2 -1
View File
@@ -2732,7 +2732,8 @@ func getCloudNicNetwork(ctx context.Context, vnic cloudprovider.ICloudNic, host
vnet := vnic.GetINetwork()
if vnet == nil {
if vnic.InClassicNetwork() {
vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, host)
region := host.GetRegion()
vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, region)
if err != nil {
return nil, errors.Wrap(err, "NewVpcForClassicNetwork")
}
+1 -1
View File
@@ -289,7 +289,7 @@ func SyncElasticCacheSkus(ctx context.Context, userCred mcclient.TokenCredential
// 同步Region elasticcache sku列表.
func SyncElasticCacheSkusByRegion(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion) error {
if region.GetDriver().IsSupportedElasticcache() {
if !region.GetDriver().IsSupportedElasticcache() {
notes := fmt.Sprintf("SyncElasticCacheSkusByRegion %s not support elasticcache", region.Name)
log.Infof(notes)
return nil
+4 -5
View File
@@ -191,12 +191,11 @@ func (manager *SVpcManager) getVpcExternalIdForClassicNetwork(regionId, cloudpro
return fmt.Sprintf("%s-%s", regionId, cloudproviderId)
}
func (manager *SVpcManager) GetOrCreateVpcForClassicNetwork(ctx context.Context, host *SHost) (*SVpc, error) {
region := host.GetRegion()
cloudprovider := host.GetCloudprovider()
func (manager *SVpcManager) GetOrCreateVpcForClassicNetwork(ctx context.Context, region *SCloudregion) (*SVpc, error) {
cloudprovider := region.GetCloudprovider()
externalId := manager.getVpcExternalIdForClassicNetwork(region.Id, cloudprovider.Id)
_vpc, err := db.FetchByExternalIdAndManagerId(manager, externalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
return q.Equals("manager_id", host.ManagerId)
return q.Equals("manager_id", region.ManagerId)
})
if err == nil {
return _vpc.(*SVpc), nil
@@ -213,7 +212,7 @@ func (manager *SVpcManager) GetOrCreateVpcForClassicNetwork(ctx context.Context,
vpc.SetEnabled(false)
vpc.Status = api.VPC_STATUS_UNAVAILABLE
vpc.ExternalId = externalId
vpc.ManagerId = host.ManagerId
vpc.ManagerId = region.ManagerId
err = manager.TableSpec().Insert(ctx, vpc)
if err != nil {
return nil, errors.Wrap(err, "Insert vpc for classic network")