diff --git a/go.mod b/go.mod index 13857e7503..142af30b90 100644 --- a/go.mod +++ b/go.mod @@ -106,7 +106,7 @@ require ( k8s.io/cri-api v0.28.15 k8s.io/klog/v2 v2.90.1 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260302154622-580e79b71c0d + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260311024040-1cfe517a347a yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0 yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1 yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91 diff --git a/go.sum b/go.sum index ecfe928af8..867574ebe0 100644 --- a/go.sum +++ b/go.sum @@ -1740,8 +1740,8 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260302154622-580e79b71c0d h1:OZVpLNmOHnsbmqjfFvRVPYTwZ0kQFA4Q4/iiK6sTfJs= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260302154622-580e79b71c0d/go.mod h1:aWRX5Phwz3nbHUNnIAm1oVogjguXPYDDgCOy/9Hnnvk= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260311024040-1cfe517a347a h1:Ei1cyNkjPepl/MeNm7h6moOx6Cq9aAsDWmQjDaHEjb8= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260311024040-1cfe517a347a/go.mod h1:aWRX5Phwz3nbHUNnIAm1oVogjguXPYDDgCOy/9Hnnvk= yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0 h1:msG4SiDSVU7CrXH06WuHlNEZXIooTcmNbfrIGHuIHBU= yunion.io/x/executor v0.0.0-20250518005516-5402e9e0bed0/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= diff --git a/vendor/modules.txt b/vendor/modules.txt index 0458675724..c777015582 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2491,7 +2491,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.3.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260302154622-580e79b71c0d +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20260311024040-1cfe517a347a ## explicit; go 1.24 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/metrics.go b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/metrics.go index 3fb76166e0..5447b1cc25 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/metrics.go +++ b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/metrics.go @@ -150,6 +150,9 @@ const ( // 虚拟机网络出速率 // 支持平台: huawei, aliyun, apsara, azure, esxi, google, bingocloud, aws, jdcloud, ecloud, zstack, qcloud, volcengine, baidu, ctyun, hcso, oracle VM_METRIC_TYPE_NET_BPS_TX TMetricType = "vm_netio.bps_sent" + // 虚拟机外网出带宽使用率 + // 支持平台: qcloud, aliyun + VM_METRIC_TYPE_NET_OUT_BANDWIDTH_USAGE TMetricType = "vm_netio.out_bandwidth_usage" // 虚拟机TCP连接数 // 支持平台: aliyun, apsara, volcengine @@ -291,8 +294,10 @@ const ( METRIC_TAG_REQUST_4XX = "4xx" METRIC_TAG_REQUST_5XX = "5xx" - METRIC_TAG_NET_TYPE = "net_type" + METRIC_TAG_NET_TYPE = "net_type" + // 外网 METRIC_TAG_NET_TYPE_INTERNET = "internet" + // 内网 METRIC_TAG_NET_TYPE_INTRANET = "intranet" METRIC_TAG_TYPE_DISK_TYPE = "disk_type" @@ -394,6 +399,7 @@ var ( VM_METRIC_TYPE_NET_BPS_RX, VM_METRIC_TYPE_NET_BPS_TX, + VM_METRIC_TYPE_NET_OUT_BANDWIDTH_USAGE, VM_METRIC_TYPE_NET_TCP_CONNECTION, VM_METRIC_TYPE_PROCESS_NUMBER, diff --git a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/objectstore.go b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/objectstore.go index 0c9bddfc44..8084246cf4 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/objectstore.go +++ b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/objectstore.go @@ -1128,14 +1128,14 @@ func newDownloadProgresser(totalSize int64, callback func(progress float64, prog func (p *sDownloadProgresser) Progress(_ int64, written int64) { p.progress += written duration := time.Since(p.startTime) - progress := float64(p.progress) / float64(p.totalSize) + progress := float64(p.progress*100) / float64(p.totalSize) progressMbps := calculateRateMbps(p.progress, duration) if p.callback != nil { p.callback(progress, progressMbps, p.totalSize/1000/1000) } if time.Since(p.reportTime) > time.Second*5 { p.reportTime = time.Now() - log.Infof("Download progress: %d/%d, %f%%, %fMbps", p.progress, p.totalSize, progress*100, progressMbps) + log.Infof("Download progress: %d/%d, %f%%, %fMbps", p.progress, p.totalSize, progress, progressMbps) } } @@ -1146,6 +1146,9 @@ func (p *sDownloadProgresser) Summary() { } func DownloadObjectParallelWithProgress(ctx context.Context, bucket ICloudBucket, key string, rangeOpt *SGetObjectRange, output io.WriterAt, outputOffset int64, blocksz int64, debug bool, parallel int, callback func(progress float64, progressMbps float64, totalSizeMb int64)) (int64, error) { + if debug { + log.Debugf("DownloadObjectParallelWithProgress bucket: %s key: %s offset: %d blocksz: %d parallel: %d", bucket.GetName(), key, outputOffset, blocksz, parallel) + } obj, err := GetIObject(bucket, key) if err != nil { return 0, errors.Wrap(err, "GetIObject") diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/monitor.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/monitor.go index a4ede6c227..0e69156c15 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/monitor.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/monitor.go @@ -345,6 +345,11 @@ func (self *SAliyunClient) GetEcsMetrics(opts *cloudprovider.MetricListOptions) "IntranetOutRate": cloudprovider.METRIC_TAG_NET_TYPE_INTRANET, } tagKey = cloudprovider.METRIC_TAG_NET_TYPE + case cloudprovider.VM_METRIC_TYPE_NET_OUT_BANDWIDTH_USAGE: + metricTags = map[string]string{ + "VPC_PublicIP_InternetOutRate_Percent": cloudprovider.METRIC_TAG_NET_TYPE_INTERNET, + } + tagKey = cloudprovider.METRIC_TAG_NET_TYPE case cloudprovider.VM_METRIC_TYPE_DISK_IO_READ_BPS: metricTags = map[string]string{ "DiskReadBPS": "", diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnsrecord.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnsrecord.go index a40d0bbd1d..16ca6dafc7 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnsrecord.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnsrecord.go @@ -33,16 +33,18 @@ type SAliasTarget struct { HostedZoneId string `xml:"HostedZoneId"` } +type SResourceRecord struct { + Value string `xml:"Value"` +} + type SDnsRecord struct { multicloud.SDnsRecordBase zone *SDnsZone - Name string `xml:"Name"` - Type string `xml:"Type"` - TTL int64 `xml:"TTL"` - ResourceRecords []struct { - Value string `xml:"Value"` - } `xml:"ResourceRecords>ResourceRecord"` + Name string `xml:"Name"` + Type string `xml:"Type"` + TTL int64 `xml:"TTL"` + ResourceRecords []SResourceRecord `xml:"ResourceRecords>ResourceRecord"` AliasTarget SAliasTarget `xml:"AliasTarget"` GeoLocation GeoLocationDetails `xml:"GeoLocation"` @@ -113,14 +115,13 @@ func (self *SDnsRecord) Delete() error { for _, r := range self.ResourceRecords { values = append(values, r.Value) } - _, err := self.zone.client.ChangeResourceRecordSets("DELETE", self.zone.Id, self.Name, self.SetIdentifier, cloudprovider.DnsRecord{ + return self.zone.client.ChangeResourceRecordSets("DELETE", self.zone.Id, self.Name, self.SetIdentifier, cloudprovider.DnsRecord{ DnsType: cloudprovider.TDnsType(self.Type), Ttl: self.TTL, DnsValue: strings.Join(values, "\n"), PolicyType: self.GetPolicyType(), PolicyValue: self.GetPolicyValue(), }) - return err } func (self *SDnsRecord) GetDnsType() cloudprovider.TDnsType { @@ -199,7 +200,7 @@ func (self *SDnsRecord) GetMxPriority() int64 { return 0 } -func (self *SAwsClient) ChangeResourceRecordSets(action, zoneId, name, id string, opts cloudprovider.DnsRecord) (string, error) { +func (self *SAwsClient) ChangeResourceRecordSets(action, zoneId, name, id string, opts cloudprovider.DnsRecord) error { record := &SDnsRecord{Name: id, Type: string(opts.DnsType)} params := map[string]string{ "Id": zoneId, @@ -234,7 +235,7 @@ func (self *SAwsClient) ChangeResourceRecordSets(action, zoneId, name, id string case cloudprovider.DnsPolicyTypeByGeoLocation: locations, err := self.ListGeoLocations() if err != nil { - return "", errors.Wrapf(err, "ListGeoLocations") + return errors.Wrapf(err, "ListGeoLocations") } find := false for i := range locations { @@ -252,10 +253,10 @@ func (self *SAwsClient) ChangeResourceRecordSets(action, zoneId, name, id string } } if !find { - return "", errors.Errorf("invalid policy value %s %s", opts.PolicyType, opts.PolicyValue) + return errors.Errorf("invalid policy value %s %s", opts.PolicyType, opts.PolicyValue) } case cloudprovider.DnsPolicyTypeFailover: - return "", cloudprovider.ErrNotImplemented + return cloudprovider.ErrNotImplemented case cloudprovider.DnsPolicyTypeWeighted: params["ChangeBatch.Changes.0.Change.ResourceRecordSet.Weight"] = string(opts.PolicyValue) case cloudprovider.DnsPolicyTypeMultiValueAnswer: @@ -263,16 +264,7 @@ func (self *SAwsClient) ChangeResourceRecordSets(action, zoneId, name, id string case cloudprovider.DnsPolicyTypeLatency: params["ChangeBatch.Changes.0.Change.ResourceRecordSet.Region"] = string(opts.PolicyValue) } - ret := struct { - ChangeInfo struct { - Id string `xml:"Id"` - } `xml:"ChangeInfo"` - }{} - err := self.dnsRequest("ChangeResourceRecordSets", params, &ret) - if err != nil { - return "", err - } - return record.GetGlobalId(), nil + return self.dnsRequest("ChangeResourceRecordSets", params, nil) } // trafficpolicy 信息 @@ -339,6 +331,5 @@ func (self *SDnsRecord) Disable() error { } func (self *SDnsRecord) Update(opts *cloudprovider.DnsRecord) error { - _, err := self.zone.client.ChangeResourceRecordSets("UPSERT", self.zone.Id, self.Name, self.SetIdentifier, *opts) - return err + return self.zone.client.ChangeResourceRecordSets("UPSERT", self.zone.Id, self.Name, self.SetIdentifier, *opts) } diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnszone.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnszone.go index 5b2f3948ee..ea1058faad 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnszone.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/dnszone.go @@ -340,8 +340,20 @@ func (self *SDnsZone) AddDnsRecord(opts *cloudprovider.DnsRecord) (string, error if len(opts.DnsName) > 1 && opts.DnsName != "@" { name = opts.DnsName + "." + self.Name } - id := stringutils.UUID4() - return self.client.ChangeResourceRecordSets("CREATE", self.Id, name, id, *opts) + id := "" + if opts.PolicyType != cloudprovider.DnsPolicyTypeSimple { + id = stringutils.UUID4() + } + err := self.client.ChangeResourceRecordSets("CREATE", self.Id, name, id, *opts) + if err != nil { + return "", errors.Wrapf(err, "ChangeResourceRecordSets") + } + record := &SDnsRecord{Name: name, Type: string(opts.DnsType), SetIdentifier: id} + record.ResourceRecords = []SResourceRecord{ + {Value: opts.DnsValue}, + } + record.zone = self + return record.GetGlobalId(), nil } func (self *SDnsZone) GetDnsProductType() cloudprovider.TDnsProductType { diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/organizations.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/organizations.go index 75162c781a..d8994ecff6 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/organizations.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aws/organizations.go @@ -274,7 +274,7 @@ func (awscli *SAwsClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error) subAccount.HealthStatus = api.CLOUD_PROVIDER_HEALTH_NO_PERMISSION } subAccount.Name = account.ID - if len(account.Name) > 0 { + if len(account.Name) > 0 && account.Name != account.ID { subAccount.Name = fmt.Sprintf("%s/%s", account.Name, account.ID) } subAccount.Account = fmt.Sprintf("%s/%s", awscli.accessKey, account.ID) diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/monitor.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/monitor.go index 20ac58c0a6..c524794081 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/monitor.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/monitor.go @@ -166,6 +166,9 @@ func (self *SQcloudClient) GetEcsMetrics(opts *cloudprovider.MetricListOptions) "lanIntraffic": cloudprovider.METRIC_TAG_NET_TYPE + ":" + cloudprovider.METRIC_TAG_NET_TYPE_INTRANET, "WanIntraffic": cloudprovider.METRIC_TAG_NET_TYPE + ":" + cloudprovider.METRIC_TAG_NET_TYPE_INTERNET, }, + cloudprovider.VM_METRIC_TYPE_NET_OUT_BANDWIDTH_USAGE: { + "Outratio": cloudprovider.METRIC_TAG_NET_TYPE + ":" + cloudprovider.METRIC_TAG_NET_TYPE_INTERNET, + }, } { for metricName, tag := range metricNames { metrics, err := self.GetMonitorData("QCE/CVM", metricName, 60, opts.StartTime, opts.EndTime, opts.RegionExtId, "InstanceId", opts.ResourceIds)