diff --git a/go.mod b/go.mod index f47e7779a6..6ef82580b6 100644 --- a/go.mod +++ b/go.mod @@ -87,14 +87,14 @@ require ( k8s.io/client-go v0.19.3 k8s.io/cluster-bootstrap v0.19.3 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250427071026-59840043b054 + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250508100452-51742e9c8266 yunion.io/x/executor v0.0.0-20241205080005-48f5b1212256 - yunion.io/x/jsonutils v1.0.1-0.20250406102002-98c9140a9edd + yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1 yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91 yunion.io/x/ovsdb v0.0.0-20230306173834-f164f413a900 yunion.io/x/pkg v1.10.4-0.20250403114914-586e94d39281 yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1 - yunion.io/x/sqlchemy v1.1.3-0.20250420094945-40f40c75a31f + yunion.io/x/sqlchemy v1.1.3-0.20250507115529-f74b83fda63b yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c ) diff --git a/go.sum b/go.sum index 5a249d40e4..303166a6b1 100644 --- a/go.sum +++ b/go.sum @@ -1274,13 +1274,13 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250427071026-59840043b054 h1:Inkg77kZHyRTxfH/jhVUejpgrgtI64KYerIw+mM3UOs= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250427071026-59840043b054/go.mod h1:FXxAEbdNfWXX9gjME3K2nJhkydHY5EKEUZb+RLEzVwQ= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250508100452-51742e9c8266 h1:ci2s8wllLSZR4Zdh5FpcOfVpyBydOqEi/X8X1ePgmuw= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250508100452-51742e9c8266/go.mod h1:FXxAEbdNfWXX9gjME3K2nJhkydHY5EKEUZb+RLEzVwQ= yunion.io/x/executor v0.0.0-20241205080005-48f5b1212256 h1:kLKQ6zbgPDQflRwoHFAjxNChcbhXIFgsUVLkJwiXu/8= yunion.io/x/executor v0.0.0-20241205080005-48f5b1212256/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= -yunion.io/x/jsonutils v1.0.1-0.20250406102002-98c9140a9edd h1:FWwB4CXiyIrh2YvxPliC9ZmrzXcFv+nuG3lhpipR4Sk= -yunion.io/x/jsonutils v1.0.1-0.20250406102002-98c9140a9edd/go.mod h1:VK4Z93dgiKgAijcSqbMKmGaBMJuHulR16Hz4K015ZPo= +yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1 h1:/+THlvf/MvgCW+7KeCDCr33e81KSRa5JmdZ1IIyLOXQ= +yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1/go.mod h1:VK4Z93dgiKgAijcSqbMKmGaBMJuHulR16Hz4K015ZPo= yunion.io/x/log v0.0.0-20190514041436-04ce53b17c6b/go.mod h1:+gauLs73omeJAPlsXcevLsJLKixV+sR/E7WSYTSx1fE= yunion.io/x/log v0.0.0-20190629062853-9f6483a7103d/go.mod h1:LC6f/4FozL0iaAbnFt2eDX9jlsyo3WiOUPm03d7+U4U= yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91 h1:inY5o3LDa/zgsIZuPN0HmpzKIsu/lLgsBmMttuDPGj4= @@ -1293,7 +1293,7 @@ yunion.io/x/pkg v1.10.4-0.20250403114914-586e94d39281 h1:P22/MaBc9bqE9DyHvS3oQjc yunion.io/x/pkg v1.10.4-0.20250403114914-586e94d39281/go.mod h1:0Bwxqd9MA3ACi119/l02FprY/o9gHahmYC2bsSbnVpM= yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1 h1:1KJ3YYinydPHpDEQRXdr/T8SYcKZ5Er+m489H+PnaQ4= yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1/go.mod h1:0iFKpOs1y4lbCxeOmq3Xx/0AcQoewVPwj62eRluioEo= -yunion.io/x/sqlchemy v1.1.3-0.20250420094945-40f40c75a31f h1:xuy9a8Hg0d8dfD8j13f687eKPCxEvttgpLQWb4NvKpI= -yunion.io/x/sqlchemy v1.1.3-0.20250420094945-40f40c75a31f/go.mod h1:vCIZpqhZ5Jzaq3tFyrti/vv8BijQKtkzSgNT/uH4H5A= +yunion.io/x/sqlchemy v1.1.3-0.20250507115529-f74b83fda63b h1:VDSvBxXEcrac4pw9+fHP17XXPZNgHzkUPxtGDNx518M= +yunion.io/x/sqlchemy v1.1.3-0.20250507115529-f74b83fda63b/go.mod h1:vCIZpqhZ5Jzaq3tFyrti/vv8BijQKtkzSgNT/uH4H5A= yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c h1:QuLab2kSRECZRxo4Lo2KcYn6XjQFDGaZ1+x0pYDVVwQ= yunion.io/x/structarg v0.0.0-20231017124457-df4d5009457c/go.mod h1:EP6NSv2C0zzqBDTKumv8hPWLb3XvgMZDHQRfyuOrQng= diff --git a/vendor/modules.txt b/vendor/modules.txt index 0637240146..27ccb26aa6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1576,7 +1576,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.2.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250427071026-59840043b054 +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250508100452-51742e9c8266 ## explicit; go 1.21 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing @@ -1659,7 +1659,7 @@ yunion.io/x/cloudmux/pkg/multicloud/zstack/provider yunion.io/x/executor/apis yunion.io/x/executor/client yunion.io/x/executor/server -# yunion.io/x/jsonutils v1.0.1-0.20250406102002-98c9140a9edd +# yunion.io/x/jsonutils v1.0.1-0.20250507052344-1abcf4f443b1 ## explicit; go 1.18 yunion.io/x/jsonutils # yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91 @@ -1725,7 +1725,7 @@ yunion.io/x/pkg/utils # yunion.io/x/s3cli v0.0.0-20241221171442-1c11599d28e1 ## explicit; go 1.12 yunion.io/x/s3cli -# yunion.io/x/sqlchemy v1.1.3-0.20250420094945-40f40c75a31f +# yunion.io/x/sqlchemy v1.1.3-0.20250507115529-f74b83fda63b ## explicit; go 1.17 yunion.io/x/sqlchemy yunion.io/x/sqlchemy/backends diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/disk.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/disk.go index d08c7e9554..6f4522a650 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/disk.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/disk.go @@ -312,12 +312,12 @@ func (self *SRegion) resizeDisk(diskId string, sizeMb int64) error { sizeGb := sizeMb / 1024 params := make(map[string]string) params["DiskId"] = diskId + params["Type"] = "online" params["NewSize"] = fmt.Sprintf("%d", sizeGb) _, err := self.ecsRequest("ResizeDisk", params) if err != nil { - log.Errorf("resizing disk (%s) to %d GiB failed: %s", diskId, sizeGb, err) - return err + return errors.Wrapf(err, "ResizeDisk %d GB", sizeGb) } return nil diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go index 3571914cf2..7980c22625 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go @@ -120,7 +120,6 @@ type SInstance struct { Onboot bool `json:"onboot"` Startup string `json:"startup,omitempty"` Tablet bool `json:"tablet"` - Agent int `json:"agent"` Memory int `json:"memory"` Balloon int `json:"balloon"` QemuOs string `json:"ostype"` @@ -496,7 +495,7 @@ func (self *SRegion) GetVmAgentNetworkInterfaces(node string, VmId int) (map[str res := fmt.Sprintf("/nodes/%s/qemu/%d/agent/network-get-interfaces", node, VmId) err := self.getAgent(res, url.Values{}, &intermediates) if err != nil { - return nil, errors.Wrap(err, "GetVmAgentNetworkInterfaces") + return ipMap, errors.Wrap(err, "GetVmAgentNetworkInterfaces") } for _, intermediate := range intermediates { @@ -615,19 +614,6 @@ func (self *SRegion) GetQemuConfig(node string, VmId int) (*SInstance, error) { config.Sshkeys, _ = url.PathUnescape(vmConfig["sshkeys"].(string)) } - agent := 0 - if _, ok := vmConfig["agent"]; ok { - switch vmConfig["agent"].(type) { - case int64: - agent = int(vmConfig["agent"].(int64)) - case string: - agentConfList := strings.Split(vmConfig["agent"].(string), ",") - agent, _ = strconv.Atoi(agentConfList[0]) - } - - } - config.Agent = agent - config.PowerState = self.GetVmPowerStatus(node, VmId) // Add disks. @@ -717,7 +703,7 @@ func (self *SRegion) GetQemuConfig(node string, VmId int) (*SInstance, error) { // Add networks. nicNames := []string{} ipMap := make(map[string]string) - if config.PowerState == "running" && config.Agent == 1 { + if config.PowerState == "running" { ipMap, _ = self.GetVmAgentNetworkInterfaces(node, VmId) } diff --git a/vendor/yunion.io/x/jsonutils/errors.go b/vendor/yunion.io/x/jsonutils/errors.go index 8bb0dccda3..c6851ccacf 100644 --- a/vendor/yunion.io/x/jsonutils/errors.go +++ b/vendor/yunion.io/x/jsonutils/errors.go @@ -49,6 +49,14 @@ func (e *JSONError) Error() string { } func NewJSONError(str []byte, pos int, msg string) *JSONError { + if len(str) == 0 { + return &JSONError{pos: 0, substr: "", msg: msg} + } + if pos < 0 { + pos = 0 + } else if pos > len(str)-1 { + pos = len(str) - 1 + } sublen := 10 start := pos - sublen end := pos + sublen @@ -58,7 +66,9 @@ func NewJSONError(str []byte, pos int, msg string) *JSONError { if end > len(str) { end = len(str) } - substr := append(str[start:pos], '^') - substr = append(substr, str[pos:end]...) + substr := make([]byte, end-start+1) + copy(substr, str[start:pos]) + substr[pos-start] = '^' + copy(substr[pos-start+1:], str[pos:end]) return &JSONError{pos: pos, substr: string(substr), msg: msg} } diff --git a/vendor/yunion.io/x/jsonutils/jsonutils.go b/vendor/yunion.io/x/jsonutils/jsonutils.go index e59ce6276a..6f1ab1548b 100644 --- a/vendor/yunion.io/x/jsonutils/jsonutils.go +++ b/vendor/yunion.io/x/jsonutils/jsonutils.go @@ -22,6 +22,7 @@ import ( "time" "unicode/utf8" + "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/gotypes" "yunion.io/x/pkg/sortedmap" @@ -678,3 +679,32 @@ func ParseStream(str []byte, offset int) (JSONObject, int, error) { return nil, i, NewJSONError(str, i, "Empty string") } } + +func ParseJsonStreams(stream []byte) ([]JSONObject, error) { + ret := make([]JSONObject, 0) + errs := make([]error, 0) + offset := 0 + for offset < len(stream) { + for offset < len(stream) && stream[offset] != '[' && stream[offset] != '{' { + offset++ + } + if offset >= len(stream) { + break + } + json, noffset, err := ParseStream(stream, offset) + if err != nil { + errs = append(errs, errors.Wrapf(err, "jsonutils.ParseStream fail at %d", offset)) + offset++ + } else { + ret = append(ret, json) + offset = noffset + } + } + if len(errs) > 0 && len(ret) == 0 { + return nil, errors.NewAggregate(errs) + } + if len(errs) > 0 { + log.Warningf("jsonutils.ParseJsonStreams: %d errors, %s", len(errs), errors.NewAggregate(errs)) + } + return ret, nil +} diff --git a/vendor/yunion.io/x/sqlchemy/backends/clickhouse/clickhouse.go b/vendor/yunion.io/x/sqlchemy/backends/clickhouse/clickhouse.go index 31c14b49f9..4195d54e4e 100644 --- a/vendor/yunion.io/x/sqlchemy/backends/clickhouse/clickhouse.go +++ b/vendor/yunion.io/x/sqlchemy/backends/clickhouse/clickhouse.go @@ -123,17 +123,17 @@ func (click *SClickhouseBackend) GetCreateSQLs(ts sqlchemy.ITableSpec) []string var ttlCol IClickhouseColumnSpec for _, c := range ts.Columns() { cols = append(cols, c.DefinitionString()) + if c.IsPrimary() { + primaries = append(primaries, fmt.Sprintf("`%s`", c.Name())) + } if cc, ok := c.(IClickhouseColumnSpec); ok { + if cc.IsOrderBy() { + orderbys = append(orderbys, fmt.Sprintf("`%s`", c.Name())) + } partition := cc.PartitionBy() if len(partition) > 0 && !utils.IsInStringArray(partition, partitions) { partitions = append(partitions, partition) } - if c.IsPrimary() && len(partition) == 0 { - primaries = append(primaries, fmt.Sprintf("`%s`", c.Name())) - } - if cc.IsOrderBy() && len(partition) == 0 { - orderbys = append(orderbys, fmt.Sprintf("`%s`", c.Name())) - } ttlC, ttlU := cc.GetTTL() if ttlC > 0 && len(ttlU) > 0 { ttlCol = cc @@ -183,7 +183,7 @@ func (click *SClickhouseBackend) GetCreateSQLs(ts sqlchemy.ITableSpec) []string createSql += fmt.Sprintf("\nTTL `%s` + INTERVAL %d %s", ttlCol.Name(), ttlCount, ttlUnit) } // set default time zone of table to UTC - createSql += "\nSETTINGS index_granularity=8192, allow_nullable_key=1" + createSql += "\nSETTINGS index_granularity=8192" } return []string{ createSql, diff --git a/vendor/yunion.io/x/sqlchemy/delete_batch.go b/vendor/yunion.io/x/sqlchemy/delete_batch.go index 2ffb7649df..5fb49c76ef 100644 --- a/vendor/yunion.io/x/sqlchemy/delete_batch.go +++ b/vendor/yunion.io/x/sqlchemy/delete_batch.go @@ -22,10 +22,15 @@ import ( "yunion.io/x/log" ) -func getSQLFilters(filter map[string]interface{}, qChar string) ([]string, []interface{}) { +func (ts *STableSpec) getSQLFilters(filter map[string]interface{}, qChar string) ([]string, []interface{}) { conds := make([]string, 0, len(filter)) params := make([]interface{}, 0, len(filter)) for k, v := range filter { + col := ts.ColumnSpec(k) + if col == nil { + log.Warningf("getSQLFilters: column %s not found", k) + continue + } if reflect.TypeOf(v).Kind() == reflect.Slice || reflect.TypeOf(v).Kind() == reflect.Array { value := reflect.ValueOf(v) if value.Len() == 0 { @@ -34,12 +39,12 @@ func getSQLFilters(filter map[string]interface{}, qChar string) ([]string, []int arr := make([]string, value.Len()) for i := 0; i < value.Len(); i++ { arr[i] = "?" - params = append(params, value.Index(i).Interface()) + params = append(params, col.ConvertFromValue(value.Index(i).Interface())) } conds = append(conds, fmt.Sprintf("%s%s%s in (%s)", qChar, k, qChar, strings.Join(arr, ", "))) } else { conds = append(conds, fmt.Sprintf("%s%s%s = ?", qChar, k, qChar)) - params = append(params, v) + params = append(params, col.ConvertFromValue(v)) } } return conds, params @@ -55,7 +60,7 @@ func (ts *STableSpec) DeleteFrom(filters map[string]interface{}) error { buf.WriteString(ts.Name()) buf.WriteString(qChar) - conds, params := getSQLFilters(filters, qChar) + conds, params := ts.getSQLFilters(filters, qChar) if len(conds) > 0 { buf.WriteString(" WHERE ") diff --git a/vendor/yunion.io/x/sqlchemy/filter.go b/vendor/yunion.io/x/sqlchemy/filter.go index b4d2763a42..da431e76b4 100644 --- a/vendor/yunion.io/x/sqlchemy/filter.go +++ b/vendor/yunion.io/x/sqlchemy/filter.go @@ -61,6 +61,12 @@ func (tq *SQuery) Contains(f string, v string) *SQuery { return tq.Filter(cond) } +// Contains filters query with a contains condition +func (tq *SQuery) ContainsAny(f string, v []string) *SQuery { + cond := ContainsAny(tq.Field(f), v) + return tq.Filter(cond) +} + // Startswith filters query with a startswith condition func (tq *SQuery) Startswith(f string, v string) *SQuery { cond := Startswith(tq.Field(f), v) diff --git a/vendor/yunion.io/x/sqlchemy/update_batch.go b/vendor/yunion.io/x/sqlchemy/update_batch.go index 0ae7d3aed7..82359c1300 100644 --- a/vendor/yunion.io/x/sqlchemy/update_batch.go +++ b/vendor/yunion.io/x/sqlchemy/update_batch.go @@ -31,10 +31,15 @@ func (ts *STableSpec) UpdateBatch(data map[string]interface{}, filter map[string params := make([]interface{}, 0, len(data)) setter := make([]string, 0, len(data)) for k, v := range data { + col := ts.ColumnSpec(k) + if col == nil { + log.Warningf("UpdateBatch: column %s not found", k) + continue + } setter = append(setter, fmt.Sprintf("%s%s%s = ?", qChar, k, qChar)) - params = append(params, v) + params = append(params, col.ConvertFromValue(v)) } - conds, condparams := getSQLFilters(filter, qChar) + conds, condparams := ts.getSQLFilters(filter, qChar) params = append(params, condparams...) buf := strings.Builder{} @@ -52,7 +57,7 @@ func (ts *STableSpec) UpdateBatch(data map[string]interface{}, filter map[string } if DEBUG_SQLCHEMY { - log.Infof("Update: %s %s", buf.String(), params) + log.Infof("UpdateBATCH: %s %s", buf.String(), params) } _, err := ts.Database().Exec(buf.String(), params...)