fix(region): vendor update (#23819)

This commit is contained in:
屈轩
2025-11-24 14:17:57 +08:00
committed by GitHub
parent 04c1b43c8b
commit 2188834cd6
10 changed files with 83 additions and 290 deletions
+1 -1
View File
@@ -98,7 +98,7 @@ require (
k8s.io/cri-api v0.28.15
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.20251117093436-5d20ee2245bf
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20251124060311-cef8482caf89
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
+2 -2
View File
@@ -1672,8 +1672,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.20251117093436-5d20ee2245bf h1:gf0g/dfVIr77Uh+V7/YcY99GGqKYEwvYcUNirx50+aM=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20251117093436-5d20ee2245bf/go.mod h1:MeA5UnvNhLXMvy+xPMOzRqjWMWMkZ3QXZP0u1bYEM0M=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20251124060311-cef8482caf89 h1:v4dD4xxL5EU/LaQVsCMR5z6GON2CTzH4tcGG9smv9vU=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20251124060311-cef8482caf89/go.mod h1:JlmQ8iuGdaAlUkivFVcUAJgi6QYr5jz1vKv7pQ5m7p8=
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=
+1 -1
View File
@@ -2264,7 +2264,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.20251117093436-5d20ee2245bf
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20251124060311-cef8482caf89
## explicit; go 1.24
yunion.io/x/cloudmux/pkg/apis
yunion.io/x/cloudmux/pkg/apis/billing
+7 -7
View File
@@ -35,11 +35,11 @@ import (
* {"arn":"arn:aws:organizations::285906155448:account/o-vgh74bqhdw/285906155448","email":"swordqiu@gmail.com","id":"285906155448","joined_method":"INVITED","joined_timestamp":"2021-02-09T03:55:27.724000Z","name":"qiu jian","status":"ACTIVE"}
*/
type SAccount struct {
ID string `json:"id"`
Name string `json:"name"`
Arn string `json:"arn"`
Email string `json:"email"`
Status string `json:"status"`
ID string `json:"id"`
Name string `json:"name"`
Arn string `json:"arn"`
Email string `json:"email"`
State string `json:"state"`
JoinedMethod string `json:"joined_method"`
JoinedTimestamp time.Time `json:"joined_timestamp"`
@@ -201,7 +201,7 @@ func (r *SRegion) ListAccounts() ([]SAccount, error) {
Name: *actPtr.Name,
Arn: *actPtr.Arn,
Email: *actPtr.Email,
Status: string(actPtr.Status),
State: string(actPtr.State),
JoinedMethod: string(actPtr.JoinedMethod),
JoinedTimestamp: *actPtr.JoinedTimestamp,
}
@@ -253,7 +253,7 @@ func (awscli *SAwsClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error)
subAccounts := []cloudprovider.SSubAccount{}
for _, account := range accounts {
subAccount := cloudprovider.SSubAccount{}
switch account.Status {
switch account.State {
case "ACTIVE":
subAccount.HealthStatus = api.CLOUD_PROVIDER_HEALTH_NORMAL
case "PENDING_ACTIVATION":
-79
View File
@@ -15,16 +15,7 @@
package esxi
import (
"context"
"fmt"
"github.com/vmware/govmomi/object"
"github.com/vmware/govmomi/vim25/mo"
"github.com/vmware/govmomi/vim25/types"
"yunion.io/x/pkg/errors"
"yunion.io/x/cloudmux/pkg/cloudprovider"
)
type SCluster struct {
@@ -35,76 +26,6 @@ func NewCluster(manager *SESXiClient, cluster *mo.ClusterComputeResource, dc *SD
return &SCluster{SManagedObject: newManagedObject(manager, cluster, dc)}
}
func (cluster *SCluster) ListResourcePools() ([]mo.ResourcePool, error) {
var pools, result []mo.ResourcePool
err := cluster.manager.scanMObjects(cluster.object.Entity().Self, RESOURCEPOOL_PROPS, &pools)
if err != nil {
return nil, errors.Wrap(err, "scanMObjects")
}
for i := range pools {
if pools[i].Parent.Type == "ClusterComputeResource" {
continue
}
result = append(result, pools[i])
}
return result, nil
}
func (cluster *SCluster) getDefaultResourcePool() (mo.ResourcePool, error) {
pools := []mo.ResourcePool{}
err := cluster.manager.scanMObjects(cluster.object.Entity().Self, RESOURCEPOOL_PROPS, &pools)
if err != nil {
return mo.ResourcePool{}, errors.Wrap(err, "scanMObjects")
}
for i := range pools {
if pools[i].Parent.Type == "ClusterComputeResource" {
return pools[i], nil
}
}
return mo.ResourcePool{}, cloudprovider.ErrNotFound
}
func (cluster *SCluster) CreateResourcePool(name string) (*mo.ResourcePool, error) {
if len(name) == 0 {
return nil, errors.Error("empty name str")
}
root, err := cluster.getDefaultResourcePool()
if err != nil {
return nil, errors.Wrap(err, "getDefaultResourcePool")
}
pool := object.NewResourcePool(cluster.manager.client.Client, root.Reference())
pool.InventoryPath = fmt.Sprintf("/%s/host/%s/Resources", cluster.datacenter.GetName(), cluster.GetName())
_, err = pool.Create(context.Background(), name, types.DefaultResourceConfigSpec())
if err != nil {
return nil, errors.Wrap(err, "pool.Create")
}
pools, err := cluster.ListResourcePools()
if err != nil {
return nil, errors.Wrap(err, "listResourcePools")
}
for i := range pools {
p := NewResourcePool(cluster.manager, &pools[i], cluster.datacenter)
if p.GetName() == name {
return &pools[i], nil
}
}
return nil, errors.Wrap(cloudprovider.ErrNotFound, "AfterCreate")
}
func (cluster *SCluster) SyncResourcePool(name string) (*mo.ResourcePool, error) {
pools, err := cluster.ListResourcePools()
if err != nil {
return nil, errors.Wrap(err, "ListResourcePools")
}
for i := range pools {
if pools[i].Entity().Name == name {
return &pools[i], nil
}
}
return cluster.CreateResourcePool(name)
}
func (cluster *SCluster) getoCluster() *mo.ClusterComputeResource {
return cluster.object.(*mo.ClusterComputeResource)
}
+2 -8
View File
@@ -118,18 +118,12 @@ func (dc *SDatacenter) GetResourcePools() ([]cloudprovider.ICloudProject, error)
}
func (dc *SDatacenter) listResourcePools() ([]mo.ResourcePool, error) {
var pools, result []mo.ResourcePool
var pools []mo.ResourcePool
err := dc.manager.scanMObjects(dc.object.Entity().Self, RESOURCEPOOL_PROPS, &pools)
if err != nil {
return nil, errors.Wrap(err, "scanMObjects")
}
for i := range pools {
if pools[i].Parent.Type == "ClusterComputeResource" {
continue
}
result = append(result, pools[i])
}
return result, nil
return pools, nil
}
func (dc *SDatacenter) ListClusters() ([]*SCluster, error) {
+27 -166
View File
@@ -145,31 +145,6 @@ func (host *SHost) GetName() string {
return formatName(host.SManagedObject.GetName())
}
func (host *SHost) GetSchedtags() ([]string, error) {
clusters, err := host.datacenter.listClusters()
if err != nil {
return nil, err
}
cpName := host.datacenter.manager.cpcfg.Name
reference := host.GetHostSystem().Reference()
tags := make([]string, 0, 1)
oDatacenter := host.datacenter.getDatacenter()
Loop:
for i := range clusters {
oc := clusters[i].getoCluster()
if len(oc.Host) == 0 {
continue
}
for _, h := range oc.Host {
if h == reference {
tags = append(tags, fmt.Sprintf("cluster:/%s/%s/%s", cpName, oDatacenter.Name, oc.Name))
continue Loop
}
}
}
return tags, nil
}
func (host *SHost) getHostSystem() *mo.HostSystem {
return host.object.(*mo.HostSystem)
}
@@ -330,10 +305,7 @@ func (host *SHost) GetIStorageById(id string) (cloudprovider.ICloudStorage, erro
}
func (host *SHost) GetEnabled() bool {
if host.getHostSystem().Summary.Runtime.InMaintenanceMode {
return false
}
return true
return !host.getHostSystem().Summary.Runtime.InMaintenanceMode
}
func (host *SHost) GetHostStatus() string {
@@ -784,6 +756,7 @@ type SCreateVMParam struct {
Disks []SDiskInfo
Nics []jsonutils.JSONObject
ProjectId string
ResourcePool string
InstanceSnapshotInfo SEsxiInstanceSnapshotInfo
EnableEsxiSwap bool
}
@@ -868,7 +841,7 @@ func (host *SHost) needScsi(disks []SDiskInfo) bool {
return false
}
func (host *SHost) addDisks(ctx context.Context, dc *SDatacenter, ds *SDatastore, disks []SDiskInfo, uuid string, objectVm *object.VirtualMachine) (*SVirtualMachine, error) {
func (host *SHost) addDisks(ctx context.Context, ds *SDatastore, disks []SDiskInfo, uuid string, objectVm *object.VirtualMachine) (*SVirtualMachine, error) {
getVM := func() (*SVirtualMachine, error) {
var moVM mo.VirtualMachine
err := host.manager.reference2Object(objectVm.Reference(), VIRTUAL_MACHINE_PROPS, &moVM)
@@ -1054,9 +1027,10 @@ func (host *SHost) DoCreateVM(ctx context.Context, ds *SDatastore, params SCreat
firmware := ""
if len(params.Bios) != 0 {
if params.Bios == "BIOS" {
switch params.Bios {
case "BIOS":
firmware = "bios"
} else if params.Bios == "UEFI" {
case "UEFI":
firmware = "efi"
}
}
@@ -1165,7 +1139,7 @@ func (host *SHost) DoCreateVM(ctx context.Context, ds *SDatastore, params SCreat
return
}
pool, err := host.GetResourcePool()
pool, err := host.SyncResourcePool(params.ResourcePool)
if err != nil {
err = errors.Wrap(err, "GetResourcePool")
return
@@ -1183,7 +1157,7 @@ func (host *SHost) DoCreateVM(ctx context.Context, ds *SDatastore, params SCreat
}
vmRef := info.Result.(types.ManagedObjectReference)
objectVM := object.NewVirtualMachine(host.manager.client.Client, vmRef)
vm, err = host.addDisks(ctx, dc, ds, params.Disks, params.Uuid, objectVM)
vm, err = host.addDisks(ctx, ds, params.Disks, params.Uuid, objectVM)
return
}
@@ -1288,9 +1262,9 @@ func (host *SHost) CloneVM(ctx context.Context, from *SVirtualMachine, snapshot
return nil, errors.Wrap(err, "GetFolder")
}
resourcePool, err := host.GetResourcePool()
resourcePool, err := host.SyncResourcePool(params.ResourcePool)
if err != nil {
return nil, errors.Wrap(err, "GetResourcePool")
return nil, errors.Wrap(err, "SyncResourcePool")
}
poolref := resourcePool.Reference()
@@ -1504,10 +1478,7 @@ func (host *SHost) changeNic(device types.BaseVirtualDevice, update types.BaseVi
func (host *SHost) isVersion50() bool {
version := host.GetVersion()
if strings.HasPrefix(version, "5.") {
return true
}
return false
return strings.HasPrefix(version, "5.")
}
func (host *SHost) getVmVersion() string {
@@ -1684,33 +1655,6 @@ func (host *SHost) FileUrlPathToDsPath(path string) (string, error) {
return newPath, nil
}
/*func (host *SHost) FindNetworkByVlanID(vlanID int32) (IVMNetwork, error) {
if host.IsActiveVlanID(vlanID) {
net, err := host.findBasicNetwork(vlanID)
if err != nil {
return nil, errors.Wrap(err, "findBasicNetwork error")
}
if net != nil {
return net, nil
}
// no found in basic network
dvpg, err := host.findVlanDVPG(vlanID)
if err != nil {
return nil, errors.Wrap(err, "findVlanDVPG")
}
return dvpg, nil
}
n, err := host.findBasicNetwork(vlanID)
if err != nil {
return nil, errors.Wrap(err, "find Basic network")
}
if n != nil {
return n, err
}
return host.findNovlanDVPG()
}*/
// IsActiveVlanID will detect if vlanID is active that means vlanID in (1, 4095).
func (host *SHost) IsActiveVlanID(vlanID int32) bool {
if vlanID > 1 && vlanID < 4095 {
@@ -1719,25 +1663,6 @@ func (host *SHost) IsActiveVlanID(vlanID int32) bool {
return false
}
/*func (host *SHost) findBasicNetwork(vlanID int32) (IVMNetwork, error) {
nets, err := host.getBasicNetworks()
if err != nil {
return nil, err
}
if len(nets) == 0 {
return nil, nil
}
if !host.IsActiveVlanID(vlanID) {
return nets[0], nil
}
for i := range nets {
if nets[i].GetVlanId() == vlanID {
return nets[i], nil
}
}
return nil, nil
}*/
func (host *SHost) getBasicNetworks() ([]IVMNetwork, error) {
nets, err := host.GetNetworks()
if err != nil {
@@ -1784,24 +1709,6 @@ func (host *SHost) getNetworkById(netId string) (IVMNetwork, error) {
return nil, errors.ErrNotFound
}
/*func (host *SHost) findNovlanDVPG() (*SDistributedVirtualPortgroup, error) {
nets, err := host.datacenter.GetNetworks()
if err != nil {
return nil, errors.Wrap(err, "SHost.datacenter.GetNetworks")
}
for _, net := range nets {
dvpg, ok := net.(*SDistributedVirtualPortgroup)
if !ok || !dvpg.ContainHost(host) || len(dvpg.GetActivePorts()) == 0 {
continue
}
nvlan := dvpg.GetVlanId()
if !host.IsActiveVlanID(nvlan) {
return dvpg, nil
}
}
return nil, nil
}*/
func (host *SHost) findDVPGById(id string) (*SDistributedVirtualPortgroup, error) {
nets, err := host.datacenter.GetNetworks()
if err != nil {
@@ -1815,34 +1722,6 @@ func (host *SHost) findDVPGById(id string) (*SDistributedVirtualPortgroup, error
return nil, nil
}
/*func (host *SHost) findVlanDVPG(vlanId int32) (*SDistributedVirtualPortgroup, error) {
nets, err := host.datacenter.GetNetworks()
if err != nil {
return nil, errors.Wrap(err, "SHost.datacenter.GetNetworks")
}
for _, net := range nets {
dvpg, ok := net.(*SDistributedVirtualPortgroup)
if !ok || len(dvpg.GetActivePorts()) == 0 {
continue
}
nvlan := dvpg.GetVlanId()
if nvlan == vlanId {
if dvpg.ContainHost(host) {
return dvpg, nil
}
msg := "Find dvpg with correct vlan but it didn't contain this host"
log.Debugf(msg)
// add host to dvg
// err := dvpg.AddHostToDVS(host)
// if err != nil {
// return nil, errors.Wrapf(err, "dvpg %s add host to dvs error", dvpg.GetName())
// }
continue
}
}
return nil, nil
}*/
func (host *SHost) GetHostSystem() *object.HostSystem {
return object.NewHostSystem(host.manager.client.Client, host.getHostSystem().Reference())
}
@@ -1883,47 +1762,29 @@ func (host *SHost) getParent() (*mo.ComputeResource, error) {
return mcr, nil
}
func (host *SHost) GetResourcePools() ([]mo.ResourcePool, error) {
cluster, err := host.GetCluster()
if err != nil {
return nil, errors.Wrap(err, "GetCluster")
}
return cluster.ListResourcePools()
}
func (host *SHost) GetCluster() (*SCluster, error) {
cluster, err := host.getCluster()
if err != nil {
return nil, errors.Wrap(err, "getCluster")
}
return NewCluster(host.manager, cluster, host.datacenter), nil
}
func (host *SHost) SyncResourcePool(name string) (*object.ResourcePool, error) {
cluster, err := host.GetCluster()
if err != nil {
log.Errorf("failed to get host %s cluster info: %v", host.GetName(), err)
if len(name) == 0 {
return host.GetResourcePool()
}
pool, err := cluster.SyncResourcePool(name)
dc, err := host.GetDatacenter()
if err != nil {
log.Errorf("failed to sync resourcePool(%s) for cluster %s error: %v", name, cluster.GetName(), err)
return host.GetResourcePool()
return nil, errors.Wrap(err, "GetDatacenter")
}
return object.NewResourcePool(host.manager.client.Client, pool.Reference()), nil
}
func (host *SHost) getCluster() (*mo.ClusterComputeResource, error) {
moHost := host.getHostSystem()
if moHost.Parent.Type != "ClusterComputeResource" {
return nil, fmt.Errorf("host %s parent is not the cluster resource", host.GetName())
}
cluster := &mo.ClusterComputeResource{}
err := host.manager.reference2Object(*moHost.Parent, []string{"name", "resourcePool"}, cluster)
pools, err := dc.listResourcePools()
if err != nil {
return nil, errors.Wrap(err, "SESXiClient.reference2Object")
return nil, errors.Wrap(err, "ListResourcePools")
}
return cluster, nil
for i := range pools {
pool := NewResourcePool(host.manager, &pools[i], host.datacenter)
if strings.EqualFold(strings.Join(pool.GetPath(), "/"), name) ||
strings.EqualFold(strings.Join(pool.GetPath(), "|"), name) ||
strings.EqualFold(pool.GetName(), name) {
log.Debugf("SyncResourcePool: %s found", strings.Join(pool.GetPath(), "|"))
return object.NewResourcePool(host.manager.client.Client, pools[i].Reference()), nil
}
}
log.Errorf("SyncResourcePool: %s not found", name)
return host.GetResourcePool()
}
func (host *SHost) GetSiblingHosts() ([]*SHost, error) {
+34 -13
View File
@@ -15,20 +15,19 @@
package esxi
import (
"net/url"
"strings"
"github.com/vmware/govmomi/vim25/mo"
api "yunion.io/x/cloudmux/pkg/apis/compute"
"yunion.io/x/cloudmux/pkg/multicloud"
"yunion.io/x/log"
)
var RESOURCEPOOL_PROPS = []string{"name", "parent", "host"}
var RESOURCEPOOL_PROPS = []string{"resourcePool"}
type SResourcePool struct {
multicloud.SProjectBase
multicloud.STagBase
SManagedObject
}
@@ -40,17 +39,39 @@ func (pool *SResourcePool) GetStatus() string {
return api.EXTERNAL_PROJECT_STATUS_AVAILABLE
}
func (pool *SResourcePool) GetName() string {
path := pool.GetPath()
if len(path) > 5 {
path = path[5:]
func (pool *SResourcePool) getParentEntity(obj *mo.ManagedEntity) *mo.ManagedEntity {
parent := obj.Parent
if parent != nil {
var entity mo.ManagedEntity
err := pool.manager.reference2Object(*parent, []string{"name", "parent"}, &entity)
if err != nil {
log.Errorf("%s", err)
return nil
}
return &entity
}
name := []string{}
for _, _name := range path {
p, _ := url.PathUnescape(_name)
name = append([]string{p}, name...)
return nil
}
func (pool *SResourcePool) fetchPath() []string {
path := []string{pool.GetName()}
obj := pool.object.Entity()
for obj != nil {
obj = pool.getParentEntity(obj)
if obj == nil || (obj.Self.Type == "ResourcePool" && obj.Name == "Resources") {
break
}
path = append(path, obj.Name)
}
return strings.Join(name, "/")
reverseArray(path)
return path
}
func (pool *SResourcePool) GetPath() []string {
if pool.path == nil {
pool.path = pool.fetchPath()
}
return pool.path
}
func NewResourcePool(manager *SESXiClient, rp *mo.ResourcePool, dc *SDatacenter) *SResourcePool {
-8
View File
@@ -44,14 +44,6 @@ func (host *SHost) GetSysTags() map[string]string {
if dc != nil {
tags["datacenter"] = dc.GetName()
}
cluster, _ := host.GetCluster()
if cluster != nil {
tags["cluster"] = cluster.GetName()
}
resourcePool, _ := host.GetResourcePool()
if resourcePool != nil {
tags["resource_pool"] = resourcePool.Name()
}
paths := host.GetPath()
for i := 3; i < len(paths); i++ {
tags[fmt.Sprintf("folder_%d", i-3)] = paths[i]
+9 -5
View File
@@ -20,16 +20,20 @@ import (
)
type SOracleTag struct {
Tags map[string]string `json:"freeformTags"`
SysTags struct {
OracleTags map[string]string `json:"Oracle-Tags"`
} `json:"definedTags"`
}
func (self SOracleTag) GetSysTags() map[string]string {
return nil
func (ot SOracleTag) GetSysTags() map[string]string {
return ot.SysTags.OracleTags
}
func (self SOracleTag) GetTags() (map[string]string, error) {
return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetTags")
func (ot SOracleTag) GetTags() (map[string]string, error) {
return ot.Tags, nil
}
func (self SOracleTag) SetTags(tags map[string]string, replace bool) error {
func (ot SOracleTag) SetTags(tags map[string]string, replace bool) error {
return errors.Wrap(cloudprovider.ErrNotImplemented, "SetTags")
}