Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update cloud region filter #8105

Merged
merged 1 commit into from
Sep 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 12 additions & 33 deletions server/controller/cloud/aliyun/aliyun.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ package aliyun
import (
"errors"
"fmt"
"sort"
"strings"

"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
ecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
Expand All @@ -42,18 +40,17 @@ type Aliyun struct {
teamID int
uuid string
uuidGenerate string
regionUuid string
regionLcuuid string
secretID string
secretKey string
regionName string
httpTimeout int
includeRegions []string
excludeRegions []string
includeRegions map[string]bool
excludeRegions map[string]bool
vpcIDToLcuuids map[string]string

// 以下两个字段的作用:消除公有云的无资源的区域和可用区
regionLcuuidToResourceNum map[string]int
azLcuuidToResourceNum map[string]int
// 消除公有云的无资源可用区使用
azLcuuidToResourceNum map[string]int

debugger *cloudcommon.Debugger
}
Expand Down Expand Up @@ -82,17 +79,9 @@ func NewAliyun(orgID int, domain mysqlmodel.Domain, cfg cloudconfig.CloudConfig)
return nil, err
}

excludeRegionsStr := config.Get("exclude_regions").MustString()
excludeRegions := []string{}
if excludeRegionsStr != "" {
excludeRegions = strings.Split(excludeRegionsStr, ",")
sort.Strings(excludeRegions)
}
includeRegionsStr := config.Get("include_regions").MustString()
includeRegions := []string{}
if includeRegionsStr != "" {
includeRegions = strings.Split(includeRegionsStr, ",")
sort.Strings(includeRegions)
regionLcuuid := config.Get("region_uuid").MustString()
if regionLcuuid == "" {
regionLcuuid = common.DEFAULT_REGION
}

return &Aliyun{
Expand All @@ -101,17 +90,16 @@ func NewAliyun(orgID int, domain mysqlmodel.Domain, cfg cloudconfig.CloudConfig)
uuid: domain.Lcuuid,
// TODO: display_name后期需要修改为uuid_generate
uuidGenerate: domain.DisplayName,
regionUuid: config.Get("region_uuid").MustString(),
regionLcuuid: regionLcuuid,
secretID: secretID,
secretKey: decryptSecretKey,
// TODO: 后期需要修改为从配置文件读取
regionName: "cn-beijing",
excludeRegions: excludeRegions,
includeRegions: includeRegions,
includeRegions: cloudcommon.UniqRegions(config.Get("include_regions").MustString()),
excludeRegions: cloudcommon.UniqRegions(config.Get("exclude_regions").MustString()),
httpTimeout: cfg.HTTPTimeout,

regionLcuuidToResourceNum: make(map[string]int),
azLcuuidToResourceNum: make(map[string]int),
azLcuuidToResourceNum: make(map[string]int),

vpcIDToLcuuids: map[string]string{},

Expand All @@ -128,14 +116,6 @@ func (a *Aliyun) CheckAuth() error {
return err
}

func (a *Aliyun) getRegionLcuuid(lcuuid string) string {
if a.regionUuid != "" {
return a.regionUuid
} else {
return lcuuid
}
}

func (a *Aliyun) checkRequiredAttributes(json *simplejson.Json, attributes []string) error {
for _, attribute := range attributes {
if _, ok := json.CheckGet(attribute); !ok {
Expand Down Expand Up @@ -309,7 +289,6 @@ func (a *Aliyun) GetCloudData() (model.Resource, error) {
log.Infof("get region (%s) data completed", region.Name, logger.NewORGPrefix(a.orgID))
}

resource.Regions = cloudcommon.EliminateEmptyRegions(regions, a.regionLcuuidToResourceNum)
resource.AZs = cloudcommon.EliminateEmptyAZs(azs, a.azLcuuidToResourceNum)
resource.VPCs = vpcs
resource.Networks = networks
Expand Down
2 changes: 1 addition & 1 deletion server/controller/cloud/aliyun/az.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (a *Aliyun) getAZs(region model.Region) ([]model.AZ, error) {
Lcuuid: common.GenerateUUIDByOrgID(a.orgID, a.uuidGenerate+"_"+zoneId),
Name: az.Get("LocalName").MustString(),
Label: zoneId,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retAZs = append(retAZs, retAZ)
}
Expand Down
7 changes: 3 additions & 4 deletions server/controller/cloud/aliyun/lb.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,9 @@ func (a *Aliyun) getLoadBalances(region model.Region, vmLcuuidToVPCLcuuid map[st
Label: lbId,
Model: lbModel,
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retLBs = append(retLBs, retLB)
a.regionLcuuidToResourceNum[retLB.RegionLcuuid]++

// 监听器信息
retLBListeners = append(retLBListeners, a.getLBListeners(region, lbId, lb.Get("Address").MustString())...)
Expand All @@ -120,7 +119,7 @@ func (a *Aliyun) getLoadBalances(region model.Region, vmLcuuidToVPCLcuuid map[st
DeviceType: common.VIF_DEVICE_TYPE_LB,
NetworkLcuuid: networkLcuuid,
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retVInterfaces = append(retVInterfaces, retVInterface)

Expand All @@ -130,7 +129,7 @@ func (a *Aliyun) getLoadBalances(region model.Region, vmLcuuidToVPCLcuuid map[st
VInterfaceLcuuid: portLcuuid,
IP: lb.Get("Address").MustString(),
SubnetLcuuid: common.GenerateUUIDByOrgID(a.orgID, networkLcuuid),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retIPs = append(retIPs, retIP)
}
Expand Down
7 changes: 3 additions & 4 deletions server/controller/cloud/aliyun/nat_gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,9 @@ func (a *Aliyun) getNatGateways(region model.Region) ([]model.NATGateway, []mode
Label: natGatewayId,
FloatingIPs: strings.Join(floatingIPs, `,`),
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retNATGateways = append(retNATGateways, retNATGateway)
a.regionLcuuidToResourceNum[retNATGateway.RegionLcuuid]++

// 接口
vinterfaceLcuuid := common.GenerateUUIDByOrgID(a.orgID, natGatewayLcuuid)
Expand All @@ -90,7 +89,7 @@ func (a *Aliyun) getNatGateways(region model.Region) ([]model.NATGateway, []mode
DeviceType: common.VIF_DEVICE_TYPE_NAT_GATEWAY,
NetworkLcuuid: common.NETWORK_ISP_LCUUID,
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retVInterfaces = append(retVInterfaces, retVInterface)

Expand All @@ -101,7 +100,7 @@ func (a *Aliyun) getNatGateways(region model.Region) ([]model.NATGateway, []mode
Lcuuid: ipLcuuid,
VInterfaceLcuuid: vinterfaceLcuuid,
IP: ip,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retIPs = append(retIPs, retIP)
}
Expand Down
3 changes: 1 addition & 2 deletions server/controller/cloud/aliyun/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,10 @@ func (a *Aliyun) getNetworks(region model.Region) ([]model.Network, []model.Subn
External: false,
NetType: common.NETWORK_TYPE_LAN,
AZLcuuid: common.GenerateUUIDByOrgID(a.orgID, a.uuidGenerate+"_"+azId),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retNetworks = append(retNetworks, retNetwork)
a.azLcuuidToResourceNum[retNetwork.AZLcuuid]++
a.regionLcuuidToResourceNum[retNetwork.RegionLcuuid]++

retSubnet := model.Subnet{
Lcuuid: common.GenerateUUIDByOrgID(a.orgID, networkLcuuid),
Expand Down
7 changes: 3 additions & 4 deletions server/controller/cloud/aliyun/rds.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ func (a *Aliyun) getRDSInstances(region model.Region) (
Label: rdsId,
VPCLcuuid: vpcLcuuid,
AZLcuuid: common.GenerateUUIDByOrgID(a.orgID, a.uuidGenerate+"_"+zoneId),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
State: rdsState,
Type: rdsEngine,
Series: rdsSeries,
Expand All @@ -141,7 +141,6 @@ func (a *Aliyun) getRDSInstances(region model.Region) (
}
retRDSInstances = append(retRDSInstances, retRDSInstance)
a.azLcuuidToResourceNum[retRDSInstance.AZLcuuid]++
a.regionLcuuidToResourceNum[retRDSInstance.RegionLcuuid]++

// 获取接口信息
tmpVInterfaces, tmpIPs := a.getRDSPorts(region, rdsId)
Expand Down Expand Up @@ -190,7 +189,7 @@ func (a *Aliyun) getRDSPorts(region model.Region, rdsId string) ([]model.VInterf
DeviceType: common.VIF_DEVICE_TYPE_RDS_INSTANCE,
NetworkLcuuid: networkLcuuid,
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retVInterfaces = append(retVInterfaces, retVInterface)

Expand All @@ -199,7 +198,7 @@ func (a *Aliyun) getRDSPorts(region model.Region, rdsId string) ([]model.VInterf
VInterfaceLcuuid: portLcuuid,
IP: ip,
SubnetLcuuid: common.GenerateUUIDByOrgID(a.orgID, networkLcuuid),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retIPs = append(retIPs, retIP)
}
Expand Down
7 changes: 3 additions & 4 deletions server/controller/cloud/aliyun/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,14 @@ func (a *Aliyun) getRedisInstances(region model.Region) (
Label: redisId,
VPCLcuuid: vpcLcuuid,
AZLcuuid: common.GenerateUUIDByOrgID(a.orgID, a.uuidGenerate+"_"+zoneId),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
InternalHost: internalHost,
PublicHost: publicHost,
State: common.REDIS_STATE_RUNNING,
Version: "Redis " + redis.Get("EngineVersion").MustString(),
}
retRedisInstances = append(retRedisInstances, retRedisInstance)
a.azLcuuidToResourceNum[retRedisInstance.AZLcuuid]++
a.regionLcuuidToResourceNum[retRedisInstance.RegionLcuuid]++

// 获取接口信息
tmpVInterfaces, tmpIPs := a.getRedisPorts(region, redisId)
Expand Down Expand Up @@ -153,7 +152,7 @@ func (a *Aliyun) getRedisPorts(region model.Region, redisId string) ([]model.VIn
DeviceType: common.VIF_DEVICE_TYPE_REDIS_INSTANCE,
NetworkLcuuid: networkLcuuid,
VPCLcuuid: vpcLcuuid,
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retVInterfaces = append(retVInterfaces, retVInterface)

Expand All @@ -162,7 +161,7 @@ func (a *Aliyun) getRedisPorts(region model.Region, redisId string) ([]model.VIn
VInterfaceLcuuid: portLcuuid,
IP: ip,
SubnetLcuuid: common.GenerateUUIDByOrgID(a.orgID, networkLcuuid),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retIPs = append(retIPs, retIP)
}
Expand Down
30 changes: 10 additions & 20 deletions server/controller/cloud/aliyun/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,8 @@
package aliyun

import (
"sort"

ecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
"github.com/deepflowio/deepflow/server/controller/cloud/model"
"github.com/deepflowio/deepflow/server/controller/common"
"github.com/deepflowio/deepflow/server/libs/logger"
)

Expand All @@ -42,27 +39,20 @@ func (a *Aliyun) getRegions() ([]model.Region, error) {
region := r.Get("Region").GetIndex(i)

localName := region.Get("LocalName").MustString()
// 当存在区域白名单时,如果当前区域不在白名单中,则跳过
if len(a.includeRegions) > 0 {
regionIndex := sort.SearchStrings(a.includeRegions, localName)
if regionIndex == len(a.includeRegions) || a.includeRegions[regionIndex] != localName {
log.Infof("region (%s) not in include_regions", localName, logger.NewORGPrefix(a.orgID))
continue
}
// 区域白名单,如果当前区域不在白名单中,则跳过
if _, ok := a.includeRegions[localName]; !ok {
log.Infof("region (%s) not in include_regions", localName, logger.NewORGPrefix(a.orgID))
continue
}
// 当存在区域黑名单是,如果当前区域在黑名单中,则跳过
if len(a.excludeRegions) > 0 {
regionIndex := sort.SearchStrings(a.excludeRegions, localName)
if regionIndex < len(a.excludeRegions) && a.excludeRegions[regionIndex] == localName {
log.Infof("region (%s) in exclude_regions", localName, logger.NewORGPrefix(a.orgID))
continue
}
// 区域黑名单,如果当前区域在黑名单中,则跳过
if _, ok := a.excludeRegions[localName]; ok {
log.Infof("region (%s) in exclude_regions", localName, logger.NewORGPrefix(a.orgID))
continue
}

retRegion := model.Region{
Lcuuid: common.GenerateUUIDByOrgID(a.orgID, region.Get("RegionId").MustString()),
Label: region.Get("RegionId").MustString(),
Name: localName,
Label: region.Get("RegionId").MustString(),
Name: localName,
}
retRegions = append(retRegions, retRegion)
}
Expand Down
3 changes: 1 addition & 2 deletions server/controller/cloud/aliyun/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,9 @@ func (a *Aliyun) getRouterAndTables(region model.Region) ([]model.VRouter, []mod
Lcuuid: routerLcuuid,
Name: routerTableName,
VPCLcuuid: common.GenerateUUIDByOrgID(a.orgID, vpcId),
RegionLcuuid: a.getRegionLcuuid(region.Lcuuid),
RegionLcuuid: a.regionLcuuid,
}
retVRouters = append(retVRouters, retVRouter)
a.regionLcuuidToResourceNum[retVRouter.RegionLcuuid]++

// 路由表规则
retRoutingTables = append(retRoutingTables, a.getRouterTables(region, routerTableId)...)
Expand Down
2 changes: 1 addition & 1 deletion server/controller/cloud/aliyun/sub_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (a *Aliyun) getSubDomains(region model.Region) []model.SubDomain {
}
config := map[string]interface{}{
"cluster_id": clusterID,
"region_uuid": a.getRegionLcuuid(region.Lcuuid),
"region_uuid": a.regionLcuuid,
"vpc_uuid": vpcLcuuid,
"port_name_regex": common.DEFAULT_PORT_NAME_REGEX,
"pod_net_ipv4_cidr_max_mask": common.K8S_POD_IPV4_NETMASK,
Expand Down
Loading
Loading