diff --git a/pkg/multicloud/esxi/cluster.go b/pkg/multicloud/esxi/cluster.go index 93c2dc6045..46de59ed49 100644 --- a/pkg/multicloud/esxi/cluster.go +++ b/pkg/multicloud/esxi/cluster.go @@ -104,3 +104,7 @@ func (cluster *SCluster) SyncResourcePool(name string) (*mo.ResourcePool, error) } return cluster.CreateResourcePool(name) } + +func (cluster *SCluster) getoCluster() *mo.ClusterComputeResource { + return cluster.object.(*mo.ClusterComputeResource) +} diff --git a/pkg/multicloud/esxi/datacenter.go b/pkg/multicloud/esxi/datacenter.go index 5ad5e2a536..a910c98797 100644 --- a/pkg/multicloud/esxi/datacenter.go +++ b/pkg/multicloud/esxi/datacenter.go @@ -38,6 +38,7 @@ type SDatacenter struct { istorages []cloudprovider.ICloudStorage inetworks []IVMNetwork iresoucePool []cloudprovider.ICloudProject + clusters []*SCluster Name string } @@ -148,6 +149,9 @@ func (dc *SDatacenter) GetCluster(cluster string) (*SCluster, error) { } func (dc *SDatacenter) listClusters() ([]*SCluster, error) { + if dc.clusters != nil { + return dc.clusters, nil + } clusters := []mo.ClusterComputeResource{} err := dc.manager.scanMObjects(dc.object.Entity().Self, RESOURCEPOOL_PROPS, &clusters) if err != nil { diff --git a/pkg/multicloud/esxi/host.go b/pkg/multicloud/esxi/host.go index 6fb41abdfd..2be54d2b15 100644 --- a/pkg/multicloud/esxi/host.go +++ b/pkg/multicloud/esxi/host.go @@ -128,6 +128,29 @@ func (self *SHost) GetMetadata() *jsonutils.JSONDict { return nil } +func (self *SHost) GetSchedtags() ([]string, error) { + clusters, err := self.datacenter.listClusters() + if err != nil { + return nil, err + } + reference := self.GetoHostSystem().Reference() + tags := make([]string, 0, 1) +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", oc.Name)) + continue Loop + } + } + } + return tags, nil +} + func (self *SHost) getHostSystem() *mo.HostSystem { return self.object.(*mo.HostSystem) } diff --git a/pkg/multicloud/esxi/resourcepool.go b/pkg/multicloud/esxi/resourcepool.go index 372ddefaba..85fbbfe8ce 100644 --- a/pkg/multicloud/esxi/resourcepool.go +++ b/pkg/multicloud/esxi/resourcepool.go @@ -24,7 +24,7 @@ import ( "yunion.io/x/onecloud/pkg/multicloud" ) -var RESOURCEPOOL_PROPS = []string{"name", "parent"} +var RESOURCEPOOL_PROPS = []string{"name", "parent", "host"} type SResourcePool struct { multicloud.SResourceBase