mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Automatic merge from release/2.2.0 -> master
* commit '9e58b400d62459400d5b120b5ece083f30e5af4f': default unuse cached token add change flavor fail status
This commit is contained in:
+24
-23
@@ -23,14 +23,14 @@ import (
|
||||
)
|
||||
|
||||
type BaseOptions struct {
|
||||
Help bool `help:"Show help" short-token:"h"`
|
||||
Debug bool `help:"Show debug information"`
|
||||
Version bool `help:"Show version"`
|
||||
Timeout int `default:"600" help:"Number of seconds to wait for a response"`
|
||||
Insecure bool `default:"false" help:"Allow skip server cert verification if URL is https" short-token:"k"`
|
||||
NoCachedToken bool `default:"$NO_CACHED_TOKEN|false" help:"Force not use cached token"`
|
||||
OsUsername string `default:"$OS_USERNAME" help:"Username, defaults to env[OS_USERNAME]"`
|
||||
OsPassword string `default:"$OS_PASSWORD" help:"Password, defaults to env[OS_PASSWORD]"`
|
||||
Help bool `help:"Show help" short-token:"h"`
|
||||
Debug bool `help:"Show debug information"`
|
||||
Version bool `help:"Show version"`
|
||||
Timeout int `default:"600" help:"Number of seconds to wait for a response"`
|
||||
Insecure bool `default:"false" help:"Allow skip server cert verification if URL is https" short-token:"k"`
|
||||
UseCachedToken bool `default:"$YUNION_USE_CACHED_TOKEN|false" help:"Use cached token"`
|
||||
OsUsername string `default:"$OS_USERNAME" help:"Username, defaults to env[OS_USERNAME]"`
|
||||
OsPassword string `default:"$OS_PASSWORD" help:"Password, defaults to env[OS_PASSWORD]"`
|
||||
// OsProjectId string `default:"$OS_PROJECT_ID" help:"Proejct ID, defaults to env[OS_PROJECT_ID]"`
|
||||
OsProjectName string `default:"$OS_PROJECT_NAME" help:"Project name, defaults to env[OS_PROJECT_NAME]"`
|
||||
OsDomainName string `default:"$OS_DOMAIN_NAME" help:"Domain name, defaults to env[OS_DOMAIN_NAME]"`
|
||||
@@ -130,23 +130,24 @@ func newClientSession(options *BaseOptions) (*mcclient.ClientSession, error) {
|
||||
authUrlAlter := strings.Replace(options.OsAuthURL, "/", "", -1)
|
||||
authUrlAlter = strings.Replace(authUrlAlter, ":", "", -1)
|
||||
tokenCachePath := filepath.Join(os.TempDir(), fmt.Sprintf("OS_AUTH_CACHE_TOKEN-%s-%s-%s-%s", authUrlAlter, options.OsUsername, options.OsDomainName, options.OsProjectName))
|
||||
cacheFile, err := os.Open(tokenCachePath)
|
||||
|
||||
if err == nil && cacheFile != nil && !options.NoCachedToken {
|
||||
fileInfo, _ := cacheFile.Stat()
|
||||
dur, err := time.ParseDuration("-24h")
|
||||
if fileInfo != nil && err == nil && fileInfo.ModTime().After(time.Now().Add(dur)) {
|
||||
bytesToken, err := ioutil.ReadAll(cacheFile)
|
||||
if err == nil {
|
||||
token := client.NewAuthTokenCredential()
|
||||
err := json.Unmarshal(bytesToken, token)
|
||||
if err != nil {
|
||||
fmt.Printf("Unmarshal token error:%s", err)
|
||||
} else if token.IsValid() {
|
||||
cacheToken = token
|
||||
if options.UseCachedToken {
|
||||
cacheFile, err := os.Open(tokenCachePath)
|
||||
if err == nil && cacheFile != nil {
|
||||
fileInfo, _ := cacheFile.Stat()
|
||||
dur, err := time.ParseDuration("-24h")
|
||||
if fileInfo != nil && err == nil && fileInfo.ModTime().After(time.Now().Add(dur)) {
|
||||
bytesToken, err := ioutil.ReadAll(cacheFile)
|
||||
if err == nil {
|
||||
token := client.NewAuthTokenCredential()
|
||||
err := json.Unmarshal(bytesToken, token)
|
||||
if err != nil {
|
||||
fmt.Printf("Unmarshal token error:%s", err)
|
||||
} else if token.IsValid() {
|
||||
cacheToken = token
|
||||
}
|
||||
}
|
||||
cacheFile.Close()
|
||||
}
|
||||
cacheFile.Close()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -74,9 +74,10 @@ const (
|
||||
VM_MIGRATING = "migrating"
|
||||
VM_MIGRATE_FAILED = "migrate_failed"
|
||||
|
||||
VM_CHANGE_FLAVOR = "change_flavor"
|
||||
VM_REBUILD_ROOT = "rebuild_root"
|
||||
VM_REBUILD_ROOT_FAIL = "rebuild_root_fail"
|
||||
VM_CHANGE_FLAVOR = "change_flavor"
|
||||
VM_CHANGE_FLAVOR_FAIL = "change_flavor_fail"
|
||||
VM_REBUILD_ROOT = "rebuild_root"
|
||||
VM_REBUILD_ROOT_FAIL = "rebuild_root_fail"
|
||||
|
||||
VM_START_SNAPSHOT = "snapshot_start"
|
||||
VM_SNAPSHOT = "snapshot"
|
||||
|
||||
@@ -34,51 +34,51 @@ func (self *GuestChangeConfigTask) OnInit(ctx context.Context, obj db.IStandalon
|
||||
func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {
|
||||
iResizeDisks, err := self.Params.Get("resize")
|
||||
if iResizeDisks == nil || err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
return
|
||||
}
|
||||
resizeDisks := iResizeDisks.(*jsonutils.JSONArray)
|
||||
for i := 0; i < resizeDisks.Length(); i++ {
|
||||
iResizeSet, err := resizeDisks.GetAt(i)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
resizeSet := iResizeSet.(*jsonutils.JSONArray)
|
||||
diskId, err := resizeSet.GetAt(0)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
idStr, err := diskId.GetString()
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
jSize, err := resizeSet.GetAt(1)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
size, err := jSize.Int()
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
iDisk, err := models.DiskManager.FetchById(idStr)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
disk := iDisk.(*models.SDisk)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -86,7 +86,7 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob
|
||||
var pendingUsage models.SQuota
|
||||
err = self.GetPendingUsage(&pendingUsage)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -120,7 +120,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob
|
||||
if iVcpuCount != nil {
|
||||
vcpuCount, err = iVcpuCount.Int()
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -128,14 +128,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob
|
||||
if iVmemSize != nil {
|
||||
vmemSize, err = iVmemSize.Int()
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
}
|
||||
err = guest.GetDriver().RequestChangeVmConfig(ctx, guest, self, vcpuCount, vmemSize)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -162,14 +162,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
var pendingUsage models.SQuota
|
||||
err = self.GetPendingUsage(&pendingUsage)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -187,13 +187,13 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob
|
||||
|
||||
err = models.QuotaManager.CancelPendingUsage(ctx, self.UserCred, guest.ProjectId, &pendingUsage, &cancelUsage)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
err = self.SetPendingUsage(&pendingUsage)
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -201,7 +201,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob
|
||||
self.SetStage("on_sync_status_complete", nil)
|
||||
err = guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId())
|
||||
if err != nil {
|
||||
self.SetStageFailed(ctx, err.Error())
|
||||
self.markStageFailed(obj, ctx, err.Error())
|
||||
logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false)
|
||||
return
|
||||
}
|
||||
@@ -227,3 +227,9 @@ func (self *GuestChangeConfigTask) OnGuestStartComplete(ctx context.Context, obj
|
||||
dt.Add(jsonutils.NewString(guest.Id), "id")
|
||||
self.SetStageComplete(ctx, dt)
|
||||
}
|
||||
|
||||
func (self *GuestChangeConfigTask) markStageFailed(obj db.IStandaloneModel, ctx context.Context, reason string) {
|
||||
guest := obj.(*models.SGuest)
|
||||
guest.SetStatus(self.UserCred, models.VM_CHANGE_FLAVOR_FAIL, reason)
|
||||
self.SetStageFailed(ctx, reason)
|
||||
}
|
||||
Reference in New Issue
Block a user