Automatic merge from release/2.2.0 -> master

* commit '9e58b400d62459400d5b120b5ece083f30e5af4f':
  default unuse cached token
  add change flavor fail status
This commit is contained in:
邱剑
2018-09-14 20:23:05 +08:00
3 changed files with 51 additions and 43 deletions
+24 -23
View File
@@ -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()
}
}
+4 -3
View File
@@ -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"
+23 -17
View File
@@ -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)
}