From df1e3f1d47d2ea1aec604577e9b5b641b1019f67 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Fri, 9 Nov 2018 16:43:01 +0800 Subject: [PATCH 1/2] fix: reverseproxy out of fds --- pkg/proxy/http.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/proxy/http.go b/pkg/proxy/http.go index a7157d4581..a554480dc0 100644 --- a/pkg/proxy/http.go +++ b/pkg/proxy/http.go @@ -2,6 +2,7 @@ package proxy import ( "context" + "crypto/tls" "fmt" "net/http" "net/http/httputil" @@ -48,8 +49,12 @@ func (p *SReverseProxy) ServeHTTP(ctx context.Context, w http.ResponseWriter, r } log.Debugf("Forwarding to servie: %q, url: %q", p.serviceName, remoteUrl.String()) proxy := httputil.NewSingleHostReverseProxy(remoteUrl) + proxy.Transport = &http.Transport{ + Proxy: http.ProxyFromEnvironment, + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + DisableKeepAlives: true, + } r.Header.Del("Cookie") r.Header.Del("X-Auth-Token") proxy.ServeHTTP(w, r) - return } From d73fd872273ea885334ffdfe8496a49cbeb6d936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Fri, 9 Nov 2018 11:36:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B7=9F=E9=9A=8F=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9A=84=E7=A3=81=E7=9B=98=EF=BC=8C=E8=B7=9F?= =?UTF-8?q?=E9=9A=8F=E4=B8=BB=E6=9C=BA=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/aliyun.go | 15 +++++++---- pkg/compute/guestdrivers/azure.go | 6 ++--- pkg/compute/guestdrivers/managedvirtual.go | 17 +++++++++++++ pkg/compute/models/disks.go | 4 ++- pkg/compute/models/guests.go | 4 ++- pkg/compute/tasks/guest_delete_task.go | 10 ++++++++ pkg/util/azure/instance.go | 29 ++++++++++++++++------ 7 files changed, 67 insertions(+), 18 deletions(-) diff --git a/pkg/compute/guestdrivers/aliyun.go b/pkg/compute/guestdrivers/aliyun.go index f90d4ef0e4..089c193f7d 100644 --- a/pkg/compute/guestdrivers/aliyun.go +++ b/pkg/compute/guestdrivers/aliyun.go @@ -81,7 +81,7 @@ type SDiskInfo struct { Metadata map[string]string } -func fetchIVMinfo(desc SManagedVMCreateConfig, iVM cloudprovider.ICloudVM, guestId string, account, passwd string) *jsonutils.JSONDict { +func fetchIVMinfo(desc SManagedVMCreateConfig, iVM cloudprovider.ICloudVM, guestId string, account, passwd string, action string) *jsonutils.JSONDict { data := jsonutils.NewDict() data.Add(jsonutils.NewString(iVM.GetOSType()), "os") @@ -116,6 +116,9 @@ func fetchIVMinfo(desc SManagedVMCreateConfig, iVM cloudprovider.ICloudVM, guest dinfo.BillingType = idisks[i].GetBillingType() dinfo.DiskFormat = idisks[i].GetDiskFormat() dinfo.AutoDelete = idisks[i].GetIsAutoDelete() + if action == "create" { + dinfo.AutoDelete = true + } dinfo.TemplateId = idisks[i].GetTemplateId() dinfo.FsFromat = idisks[i].GetFsFormat() dinfo.ExpiredAt = idisks[i].GetExpiredAt() @@ -219,7 +222,7 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu } }*/ - data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd, action) /* data.Add(jsonutils.NewString(iVM.GetOSType()), "os") @@ -299,7 +302,7 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu return nil, err } - data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd, action) /* data := jsonutils.NewDict() @@ -366,7 +369,7 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu } } - data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, "root", passwd, action) return data, nil }) @@ -402,7 +405,9 @@ func (self *SAliyunGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Contex disk.Status = models.DISK_READY disk.BillingType = diskInfo[i].BillingType disk.FsFormat = diskInfo[i].FsFromat - disk.AutoDelete = diskInfo[i].AutoDelete + if diskInfo[i].AutoDelete { + disk.AutoDelete = true + } disk.TemplateId = diskInfo[i].TemplateId disk.DiskFormat = diskInfo[i].DiskFormat disk.ExpiredAt = diskInfo[i].ExpiredAt diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index 8a9a91c03d..192d3c951c 100644 --- a/pkg/compute/guestdrivers/azure.go +++ b/pkg/compute/guestdrivers/azure.go @@ -113,7 +113,7 @@ func (self *SAzureGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gue return nil, err } - data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd, action) return data, nil } }) @@ -136,7 +136,7 @@ func (self *SAzureGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gue if err != nil { return nil, err } - data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd, action) return data, nil }) } else if action == "rebuild" { @@ -153,7 +153,7 @@ func (self *SAzureGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gue } log.Debugf("VMrebuildRoot %s, and status is ready", iVM.GetGlobalId()) - data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd) + data := fetchIVMinfo(desc, iVM, guest.Id, DEFAULT_USER, passwd, action) return data, nil }) diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index 987de82141..9e81ca9adc 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -156,6 +156,23 @@ func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx conte if err != nil { return nil, err } + + for _, guestdisk := range guest.GetDisks() { + if disk := guestdisk.GetDisk(); disk != nil && disk.AutoDelete { + idisk, err := disk.GetIDisk() + if err != nil { + if err == cloudprovider.ErrNotFound { + continue + } else { + return nil, err + } + } + err = idisk.Delete() + if err != nil { + return nil, err + } + } + } return nil, nil }) return nil diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 700869341a..ac5a960469 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -739,7 +739,9 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke self.Status = extDisk.GetStatus() self.DiskFormat = extDisk.GetDiskFormat() self.DiskSize = extDisk.GetDiskSizeMB() - self.AutoDelete = extDisk.GetIsAutoDelete() + if extDisk.GetIsAutoDelete() { + self.AutoDelete = true + } // self.TemplateId = extDisk.GetTemplateId() no sync template ID self.DiskType = extDisk.GetDiskType() if index == 0 { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 81138d00c6..bc39129aef 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -130,6 +130,8 @@ var VM_CREATING_STATUS = []string{VM_CREATE_NETWORK, VM_CREATE_DISK, VM_START_DE var HYPERVISORS = []string{HYPERVISOR_KVM, HYPERVISOR_BAREMETAL, HYPERVISOR_ESXI, HYPERVISOR_CONTAINER, HYPERVISOR_ALIYUN, HYPERVISOR_AZURE} +var PUBLIC_CLOUD_HYPERVISORS = []string{HYPERVISOR_ALIYUN, HYPERVISOR_AZURE} + // var HYPERVISORS = []string{HYPERVISOR_ALIYUN} var HYPERVISOR_HOSTTYPE = map[string]string{ @@ -3164,7 +3166,7 @@ func (self *SGuest) DoPendingDelete(ctx context.Context, userCred mcclient.Token for _, guestdisk := range self.GetDisks() { disk := guestdisk.GetDisk() storage := disk.GetStorage() - if utils.IsInStringArray(storage.StorageType, sysutils.LOCAL_STORAGE_TYPES) || disk.DiskType == DISK_TYPE_SYS || disk.DiskType == DISK_TYPE_SWAP || self.Hypervisor == HYPERVISOR_ALIYUN { + if utils.IsInStringArray(storage.StorageType, sysutils.LOCAL_STORAGE_TYPES) || utils.IsInStringArray(disk.DiskType, []string{DISK_TYPE_SYS, DISK_TYPE_SWAP}) || (utils.IsInStringArray(self.Hypervisor, PUBLIC_CLOUD_HYPERVISORS) && disk.AutoDelete) { disk.DoPendingDelete(ctx, userCred) } else { self.DetachDisk(ctx, disk, userCred) diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index be53871e02..85df085ec3 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -93,9 +93,19 @@ func (self *GuestDeleteTask) OnPendingDeleteComplete(ctx context.Context, obj db if !guest.IsSystem { self.NotifyServerDeleted(ctx, guest) } + self.SetStage("on_sync_guest_conf_complete", nil) + guest.StartSyncTask(ctx, self.UserCred, false, self.GetTaskId()) +} + +func (self *GuestDeleteTask) OnSyncGuestConfComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { self.SetStageComplete(ctx, nil) } +func (self *GuestDeleteTask) OnSyncGuestConfCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { + guest := obj.(*models.SGuest) + self.OnFailed(ctx, guest, err) +} + func (self *GuestDeleteTask) StartDeleteGuest(ctx context.Context, guest *models.SGuest) { // No snapshot self.SetStage("on_guest_detach_disks_complete", nil) diff --git a/pkg/util/azure/instance.go b/pkg/util/azure/instance.go index ff07e45fc7..1515910793 100644 --- a/pkg/util/azure/instance.go +++ b/pkg/util/azure/instance.go @@ -492,6 +492,7 @@ func (region *SRegion) AttachDisk(instanceId, diskId string) error { for i := 0; i < len(instance.Properties.StorageProfile.DataDisks); i++ { instance.Properties.StorageProfile.DataDisks[i].Lun = lun dataDisks = append(dataDisks, instance.Properties.StorageProfile.DataDisks[i]) + lun++ } dataDisks = append(dataDisks, DataDisk{ Lun: lun, @@ -771,17 +772,29 @@ func (self *SRegion) DeleteVM(instanceId string) error { } func (self *SInstance) DeleteVM() error { - if err := self.host.zone.region.DeleteVM(self.ID); err != nil { + sysDiskId := "" + if self.Properties.StorageProfile.OsDisk.ManagedDisk != nil { + sysDiskId = self.Properties.StorageProfile.OsDisk.ManagedDisk.ID + } + err := self.host.zone.region.DeleteVM(self.ID) + if err != nil { return err } - if nics, err := self.getNics(); err != nil { + if len(sysDiskId) > 0 { + err := self.host.zone.region.deleteDisk(sysDiskId) + if err != nil { + return err + } + } + + nics, err := self.getNics() + if err != nil { return err - } else { - for _, nic := range nics { - if err := nic.Delete(); err != nil { - if err != cloudprovider.ErrNotFound { - return err - } + } + for _, nic := range nics { + if err := nic.Delete(); err != nil { + if err != cloudprovider.ErrNotFound { + return err } } }