mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-17 16:26:57 +08:00
zone添加GetIVMById,GetIDiskById方法
This commit is contained in:
@@ -63,6 +63,9 @@ type ICloudRegion interface {
|
||||
GetIVpcById(id string) (ICloudVpc, error)
|
||||
GetIZoneById(id string) (ICloudZone, error)
|
||||
GetIEipById(id string) (ICloudEIP, error)
|
||||
// Esxi没有zone,需要通过region确认vm是否被删除
|
||||
GetIVMById(id string) (ICloudVM, error)
|
||||
GetIDiskById(id string) (ICloudDisk, error)
|
||||
|
||||
DeleteSecurityGroup(vpcId, secgroupId string) error
|
||||
SyncSecurityGroup(secgroupId string, vpcId string, name string, desc string, rules []secrules.SecurityRule) (string, error)
|
||||
|
||||
@@ -1156,16 +1156,48 @@ func (self *SDisk) syncDiskStorage(ctx context.Context, userCred mcclient.TokenC
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SDisk) GetIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
storage := self.GetStorage()
|
||||
if storage == nil {
|
||||
return nil, fmt.Errorf("failed to get storage for disk %s(%s)", self.Name, self.Id)
|
||||
}
|
||||
|
||||
provider, err := storage.GetDriver()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("No cloudprovider for storage %s(%s) error: %v", storage.Name, storage.Id, err)
|
||||
}
|
||||
|
||||
if provider.GetFactory().IsOnPremise() {
|
||||
return provider.GetOnPremiseIRegion()
|
||||
}
|
||||
region := storage.GetRegion()
|
||||
if region == nil {
|
||||
msg := "fail to find region of storage???"
|
||||
log.Errorf(msg)
|
||||
return nil, fmt.Errorf(msg)
|
||||
}
|
||||
return provider.GetIRegionById(region.ExternalId)
|
||||
}
|
||||
|
||||
func (self *SDisk) syncRemoveCloudDisk(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
lockman.LockObject(ctx, self)
|
||||
defer lockman.ReleaseObject(ctx, self)
|
||||
|
||||
err := self.ValidatePurgeCondition(ctx)
|
||||
iregion, err := self.GetIRegion()
|
||||
if err != nil {
|
||||
return self.SetStatus(userCred, api.DISK_UNKNOWN, "missing original disk after sync")
|
||||
} else {
|
||||
return self.RealDelete(ctx, userCred)
|
||||
return err
|
||||
}
|
||||
_, err = iregion.GetIDiskById(self.ExternalId)
|
||||
if err != cloudprovider.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
err = self.ValidatePurgeCondition(ctx)
|
||||
if err != nil {
|
||||
self.SetStatus(userCred, api.DISK_UNKNOWN, "missing original disk after sync")
|
||||
return err
|
||||
}
|
||||
return self.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, extDisk cloudprovider.ICloudDisk, index int, syncOwnerId mcclient.IIdentityProvider) error {
|
||||
|
||||
@@ -1889,6 +1889,21 @@ var (
|
||||
lostNamePattern = regexp.MustCompile(`-lost@\d{8}$`)
|
||||
)
|
||||
|
||||
func (self *SGuest) GetIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
host := self.GetHost()
|
||||
if host == nil {
|
||||
return nil, fmt.Errorf("failed to get host by guest %s(%s)", self.Name, self.Id)
|
||||
}
|
||||
provider, err := host.GetDriver()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("No cloudprovider for host: %s", err)
|
||||
}
|
||||
if provider.GetFactory().IsOnPremise() {
|
||||
return provider.GetOnPremiseIRegion()
|
||||
}
|
||||
return host.GetIRegion()
|
||||
}
|
||||
|
||||
func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
lockman.LockObject(ctx, self)
|
||||
defer lockman.ReleaseObject(ctx, self)
|
||||
@@ -1909,6 +1924,15 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok
|
||||
return nil
|
||||
}
|
||||
|
||||
iregion, err := self.GetIRegion()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = iregion.GetIVMById(self.ExternalId)
|
||||
if err != cloudprovider.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
if options.SyncPurgeRemovedResources.Contains(self.Keyword()) {
|
||||
log.Debugf("purge removed resource %s", self.Name)
|
||||
return self.purge(ctx, userCred)
|
||||
@@ -1924,7 +1948,6 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok
|
||||
if self.Status != api.VM_UNKNOWN {
|
||||
self.SetStatus(userCred, api.VM_UNKNOWN, "Sync lost")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -280,6 +280,14 @@ func (self *SRegion) getZoneById(id string) (*SZone, error) {
|
||||
return nil, fmt.Errorf("no such zone %s", id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.getDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVpcs() ([]cloudprovider.ICloudVpc, error) {
|
||||
if self.ivpcs == nil {
|
||||
err := self.fetchInfrastructure()
|
||||
|
||||
@@ -257,6 +257,14 @@ func (self *SRegion) GetIVpcs() ([]cloudprovider.ICloudVpc, error) {
|
||||
return self.ivpcs, nil
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIEips() ([]cloudprovider.ICloudEIP, error) {
|
||||
_, err := self.getEc2Client()
|
||||
if err != nil {
|
||||
|
||||
@@ -218,6 +218,14 @@ func (self *SRegion) GetIStorageById(id string) (cloudprovider.ICloudStorage, er
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIHosts() ([]cloudprovider.ICloudHost, error) {
|
||||
iHosts := make([]cloudprovider.ICloudHost, 0)
|
||||
|
||||
|
||||
@@ -46,6 +46,34 @@ func (cli *SESXiClient) GetIHosts() ([]cloudprovider.ICloudHost, error) {
|
||||
return ihosts, nil
|
||||
}
|
||||
|
||||
func (cli *SESXiClient) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
hosts, err := cli.GetIHosts()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, host := range hosts {
|
||||
vm, err := host.GetIVMById(id)
|
||||
if err != cloudprovider.ErrNotFound {
|
||||
return vm, err
|
||||
}
|
||||
}
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (self *SESXiClient) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
storages, err := self.GetIStorages()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, storage := range storages {
|
||||
disk, err := storage.GetIDiskById(id)
|
||||
if err != cloudprovider.ErrNotFound {
|
||||
return disk, err
|
||||
}
|
||||
}
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (cli *SESXiClient) GetIHostById(id string) (cloudprovider.ICloudHost, error) {
|
||||
return cli.FindHostByIp(id)
|
||||
}
|
||||
|
||||
@@ -136,6 +136,18 @@ func (self *SRegion) fetchIVpcs() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
instance, err := self.GetInstanceByID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &instance, err
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetGeographicInfo() cloudprovider.SGeographicInfo {
|
||||
if info, ok := LatitudeAndLongitude[self.ID]; ok {
|
||||
return info
|
||||
|
||||
@@ -188,6 +188,14 @@ func (region *SRegion) GetIStoragecaches() ([]cloudprovider.ICloudStoragecache,
|
||||
return []cloudprovider.ICloudStoragecache{storageCache}, nil
|
||||
}
|
||||
|
||||
func (region *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return region.GetInstance(id)
|
||||
}
|
||||
|
||||
func (region *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return region.GetDisk(id)
|
||||
}
|
||||
|
||||
func (region *SRegion) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) {
|
||||
ivpcs, err := region.GetIVpcs()
|
||||
if err != nil {
|
||||
|
||||
@@ -285,6 +285,14 @@ func (self *SRegion) GetClient() *SQcloudClient {
|
||||
return self.client
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIEipById(eipId string) (cloudprovider.ICloudEIP, error) {
|
||||
if len(eipId) == 0 {
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
|
||||
@@ -83,6 +83,18 @@ func (self *SRegion) GetGeographicInfo() cloudprovider.SGeographicInfo {
|
||||
return cloudprovider.SGeographicInfo{}
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
instance, err := self.GetInstanceByID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &instance, nil
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIZones() ([]cloudprovider.ICloudZone, error) {
|
||||
if self.izones == nil {
|
||||
var err error
|
||||
|
||||
@@ -78,6 +78,14 @@ func (region *SRegion) Refresh() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIVMById(id string) (cloudprovider.ICloudVM, error) {
|
||||
return self.GetInstance(id)
|
||||
}
|
||||
|
||||
func (self *SRegion) GetIDiskById(id string) (cloudprovider.ICloudDisk, error) {
|
||||
return self.GetDisk(id)
|
||||
}
|
||||
|
||||
func (region *SRegion) GetIHostById(id string) (cloudprovider.ICloudHost, error) {
|
||||
return region.GetHost(id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user