diff --git a/go.mod b/go.mod index 8a4ceac32c..421cba936e 100644 --- a/go.mod +++ b/go.mod @@ -96,7 +96,7 @@ require ( k8s.io/cri-api v0.22.17 k8s.io/klog/v2 v2.20.0 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250819082921-e8962fd1c1ee + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250820024120-20f73c47b078 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 cc9909e8e3..26f18d41ee 100644 --- a/go.sum +++ b/go.sum @@ -1408,8 +1408,8 @@ 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.20250819082921-e8962fd1c1ee h1:n/ZnGZDjLGXOAOQOqDiANRWcuu0I2LazK7+utE/KuAA= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250819082921-e8962fd1c1ee/go.mod h1:FXxAEbdNfWXX9gjME3K2nJhkydHY5EKEUZb+RLEzVwQ= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250820024120-20f73c47b078 h1:KaAEKjdAcpRrJlrJfOtcXCz5IUgPdv7dqeZnLswxLXE= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250820024120-20f73c47b078/go.mod h1:FXxAEbdNfWXX9gjME3K2nJhkydHY5EKEUZb+RLEzVwQ= 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/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index 854722a399..15ee0f0815 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -1114,6 +1114,12 @@ func syncHostVMs(ctx context.Context, userCred mcclient.TokenCredential, syncRes return } + // 快速同步可能会导致guest被删除,所以需要重新获取 + guest := GuestManager.FetchGuestById(syncVMPairs[i].Local.Id) + if guest == nil || guest.Deleted || guest.PendingDeleted { + return + } + SyncVMPeripherals(ctx, userCred, syncVMPairs[i].Local, syncVMPairs[i].Remote, localHost, provider, driver) }() } diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index eb57da44d5..b2757d7f4b 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -909,8 +909,9 @@ func (self *SElasticip) AssociateLoadbalancer(ctx context.Context, userCred mccl if len(self.AssociateType) > 0 && len(self.AssociateId) > 0 { if self.AssociateType == api.EIP_ASSOCIATE_TYPE_LOADBALANCER && self.AssociateId == lb.Id { return nil - } else { - return fmt.Errorf("EIP has been associated!!") + } + if self.GetAssociateResource() != nil { + return fmt.Errorf("eip has been associated!!") } } _, err := db.Update(self, func() error { diff --git a/vendor/modules.txt b/vendor/modules.txt index 310157aca6..ae3196a109 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1852,7 +1852,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.20250819082921-e8962fd1c1ee +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20250820024120-20f73c47b078 ## explicit; go 1.21 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/eip.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/eip.go index 95a9bbf234..fb4071fe69 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/eip.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/aliyun/eip.go @@ -163,6 +163,9 @@ func (self *SEipAddress) GetMode() string { func (self *SEipAddress) GetAssociationType() string { switch self.InstanceType { case EIP_INSTANCE_TYPE_ECS, "NetworkInterface": + if strings.HasPrefix(self.Name, "CREATE_BY_ALB") || strings.HasPrefix(self.Name, "CREATE_BY_NLB") { + return api.EIP_ASSOCIATE_TYPE_LOADBALANCER + } return api.EIP_ASSOCIATE_TYPE_SERVER case EIP_INSTANCE_TYPE_NAT: return api.EIP_ASSOCIATE_TYPE_NAT_GATEWAY