mcclient error

This commit is contained in:
TangBin
2018-09-17 19:26:07 +08:00
parent e1627fdd8a
commit 65880ff857
9 changed files with 41 additions and 36 deletions

View File

@@ -22,7 +22,7 @@ func newNameValidator(manager IModelManager, ownerProjId string, name string) er
return err
}
if !isNameUnique(manager, ownerProjId, name) {
return httperrors.NewConflictError(fmt.Sprintf("duplicate name %s", name))
return httperrors.NewDuplicateNameError("name", name)
}
return nil
}
@@ -44,7 +44,7 @@ func alterNameValidator(model IModel, name string) error {
return err
}
if !isAlterNameUnique(model, name) {
return httperrors.NewConflictError(fmt.Sprintf("duplicate name %s", name))
return httperrors.NewDuplicateNameError("name", name)
}
return nil
}

View File

@@ -214,7 +214,7 @@ func (model *SVirtualResourceBase) PerformChangeOwner(ctx context.Context, userC
q = q.Equals("tenant_id", tobj.GetId())
q = q.NotEquals("id", model.GetId())
if q.Count() > 0 {
return nil, httperrors.NewConflictError(fmt.Sprintf("duplicate name %s", model.GetName()))
return nil, httperrors.NewDuplicateNameError("name", model.GetName())
}
former, _ := TenantCacheManager.FetchTenantById(ctx, model.ProjectId)
if former == nil {

View File

@@ -144,7 +144,7 @@ func (self *SSecurityGroup) PerformClone(ctx context.Context, userCred mcclient.
sql := SecurityGroupManager.Query()
sql = SecurityGroupManager.FilterByName(sql, name)
if sql.Count() != 0 {
return nil, httperrors.NewDuplicateNameError("Dumplicate name %s", name)
return nil, httperrors.NewDuplicateNameError("name", name)
}
}

View File

@@ -301,7 +301,8 @@ func (self *SStoragecache) PerformUncacheImage(ctx context.Context, userCred mcc
image, err := CachedimageManager.getImageInfo(ctx, userCred, imageStr, isForce)
if err != nil {
return nil, httperrors.NewImageNotFoundError("image %s not found: %s", imageStr, err)
log.Infof("image %s not found %s", imageStr, err)
return nil, httperrors.NewImageNotFoundError(imageStr)
}
scimg := StoragecachedimageManager.GetStoragecachedimage(self.Id, image.Id)
@@ -337,7 +338,8 @@ func (self *SStoragecache) PerformCacheImage(ctx context.Context, userCred mccli
image, err := CachedimageManager.getImageInfo(ctx, userCred, imageStr, isForce)
if err != nil {
return nil, httperrors.NewImageNotFoundError("image %s not found: %s", imageStr, err)
log.Infof("image %s not found %s", imageStr, err)
return nil, httperrors.NewImageNotFoundError(imageStr)
}
if len(image.Checksum) == 0 {

View File

@@ -11,13 +11,13 @@ func NewJsonClientError(code int, title string, msg string, error httputils.Erro
return &err
}
func errorMessage(msg string, params []interface{}) (string, httputils.Error) {
fileds := make([]string, len(params))
func errorMessage(msg string, params ...interface{}) (string, httputils.Error) {
fields := make([]string, len(params))
for i, v := range params {
fileds[i] = fmt.Sprint(v)
fields[i] = fmt.Sprint(v)
}
error := httputils.Error{Id: msg, Fields: fileds}
error := httputils.Error{Id: msg, Fields: fields}
if len(params) > 0 {
msg = fmt.Sprintf(msg, params...)
}
@@ -60,8 +60,8 @@ func NewPaymentError(msg string, params ...interface{}) *httputils.JSONClientErr
return NewJsonClientError(402, "PaymentError", msg, err)
}
func NewImageNotFoundError(msg string, params ...interface{}) *httputils.JSONClientError {
msg, err := errorMessage(msg, params)
func NewImageNotFoundError(imageId string) *httputils.JSONClientError {
msg, err := errorMessage("Image %s not found", imageId)
return NewJsonClientError(404, "ImageNotFoundError", msg, err)
}
@@ -105,6 +105,11 @@ func NewWeakPasswordError() *httputils.JSONClientError {
return NewJsonClientError(400, "WeakPasswordError", msg, err)
}
func NewMissingParameterError(paramName string) *httputils.JSONClientError {
msg, err := errorMessage("Missing parameter %s", paramName)
return NewJsonClientError(400, "MissingParameterError", msg, err)
}
func NewInsufficientResourceError(msg string, params ...interface{}) *httputils.JSONClientError {
msg, err := errorMessage(msg, params)
return NewJsonClientError(400, "InsufficientResourceError", msg, err)
@@ -160,8 +165,8 @@ func NewNotAcceptableError(msg string, params ...interface{}) *httputils.JSONCli
return NewJsonClientError(406, "NotAcceptableError", msg, err)
}
func NewDuplicateNameError(msg string, params ...interface{}) *httputils.JSONClientError {
msg, err := errorMessage(msg, params)
func NewDuplicateNameError(resName string, resId string) *httputils.JSONClientError {
msg, err := errorMessage("Duplicate %s %s", resName, resId)
return NewJsonClientError(409, "DuplicateNameError", msg, err)
}

View File

@@ -71,6 +71,10 @@ func InvalidInputError(w http.ResponseWriter, msg string, params ...interface{})
JsonClientError(w, NewInputParameterError(msg, params...))
}
func MissingParameterError(w http.ResponseWriter, param string) {
JsonClientError(w, NewMissingParameterError(param))
}
func ConflictError(w http.ResponseWriter, msg string, params ...interface{}) {
JsonClientError(w, NewConflictError(msg, params...))
}

View File

@@ -37,10 +37,10 @@ func (this *DomainManager) UpdateConfig(s *mcclient.ClientSession, domain string
func (this *DomainManager) _updateConfig(s *mcclient.ClientSession, domain string, config jsonutils.JSONObject) (jsonutils.JSONObject, error) {
driver, e := config.GetString("config", "identity", "driver")
if e != nil {
return nil, fmt.Errorf("Malformed domain configuration %s", driver)
return nil, httperrors.NewInputParameterError("Malformed domain configuration %s", driver)
}
if driver != "ldap" {
return nil, fmt.Errorf("Invalid driver: %s, ONLY ldap is supported", driver)
return nil, httperrors.NewInputParameterError("Invalid driver: %s, ONLY ldap is supported", driver)
}
url := fmt.Sprintf("/domains/%s/config", domain)
ret, e := this._patch(s, url, config, "config")
@@ -58,10 +58,7 @@ func (this *DomainManager) _updateConfig(s *mcclient.ClientSession, domain strin
func (this *DomainManager) DeleteConfig(s *mcclient.ClientSession, domain string) (jsonutils.JSONObject, error) {
if domain == "default" {
err := httputils.JSONClientError{}
err.Code = 403
err.Details = fmt.Sprintf("domain %s did not allowed deleted", domain)
return nil, &err
return nil, httperrors.NewForbiddenError("domain %s did not allowed deleted", domain)
}
result, e := this._deleteConfig(s, domain)
@@ -143,14 +140,11 @@ func (this *DomainManager) DoDomainConfigUpdate(s *mcclient.ClientSession, domai
_domain, err := params.Get("domain")
if err != nil {
return ret, err
return ret, httperrors.NewMissingParameterError("domain")
}
name, _ := _domain.GetString("name")
if domain == "default" && name != "Default" {
err := httputils.JSONClientError{}
err.Code = 403
err.Details = fmt.Sprintf("domain %s did not allowed update Name", domain)
return nil, &err
return nil, httperrors.NewUnsupportOperationError("domain %s did not allowed update Name", domain)
}
_domain, err = this.Patch(s, domain, _domain)
@@ -182,7 +176,7 @@ func (this *DomainManager) DoDomainConfigCreate(s *mcclient.ClientSession, param
_domain, err := params.Get("domain")
if err != nil {
return ret, err
return ret, httperrors.NewMissingParameterError("domain")
}
_domain, err = this.Create(s, _domain)
@@ -237,16 +231,16 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param
detail, err := this.GetById(s, domain, nil)
if err != nil {
log.Errorf("got domain detail error: %v", err)
return ret, httperrors.NewResourceNotFoundError("找不到该认证域")
return ret, httperrors.NewResourceNotFoundError("%s %s not find", "Domain", domain)
}
driver, _ := detail.GetString("driver")
if driver != "ldap" {
if result, err := UsersV3.List(s, params); err != nil {
log.Errorf("user list got error: %v", err)
return ret, httperrors.NewInternalServerError("服务器错误,获取认证域用户列表失败,不允许删除")
return ret, httperrors.NewInternalServerError("Not allow delete: failed to fetch related user list.")
} else if len(result.Data) > 0 {
return ret, httperrors.NewForbiddenError(fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)))
return ret, httperrors.NewForbiddenError(fmt.Sprintf("Not allow delete: there still exists %s user related with domain %s.", objId, len(result.Data)))
}
}

View File

@@ -76,11 +76,11 @@ func (this *ImageManager) GetByName(session *mcclient.ClientSession, id string,
return nil, e
}
if len(listresults.Data) == 0 {
return nil, httperrors.NewImageNotFoundError("Image not found")
return nil, httperrors.NewImageNotFoundError(id)
} else if len(listresults.Data) == 1 {
return listresults.Data[0], nil
} else {
return nil, httperrors.NewDuplicateNameError("More than 1 images matching the name")
return nil, httperrors.NewDuplicateNameError("image name", id)
}
}
@@ -436,7 +436,7 @@ func (this *ImageManager) _create(s *mcclient.ClientSession, params jsonutils.JS
if len(format) == 0 {
format, _ = params.GetString("disk_format")
if len(format) == 0 {
return nil, fmt.Errorf("Missing format")
return nil, httperrors.NewMissingParameterError("disk_format")
}
}
exists, _ := utils.InStringArray(format, []string{"qcow2", "raw", "vhd", "vmdk", "iso", "docker"})
@@ -449,7 +449,7 @@ func (this *ImageManager) _create(s *mcclient.ClientSession, params jsonutils.JS
if len(imageId) == 0 {
osType, err := params.GetString("properties", "os_type")
if err != nil {
return nil, fmt.Errorf("Can't get os_type from params: %s", params.String())
return nil, httperrors.NewMissingParameterError("os_type")
}
exists, _ = utils.InStringArray(osType, []string{"Windows", "Linux", "Freebsd", "Android", "macOS", "VMWare"})
if !exists {
@@ -457,11 +457,11 @@ func (this *ImageManager) _create(s *mcclient.ClientSession, params jsonutils.JS
}
name, _ := params.GetString("name")
if len(name) == 0 {
return nil, fmt.Errorf("Missing name")
return nil, httperrors.NewMissingParameterError("name")
}
dupName, e := this.IsNameDuplicate(s, name)
if dupName {
return nil, fmt.Errorf("Duplicate name %s", name)
return nil, httperrors.NewDuplicateNameError("name", name)
}
if e != nil {
return nil, fmt.Errorf("Check name duplicate error %s", e)

View File

@@ -101,7 +101,7 @@ func (this *ResourceManager) GetByNameInContexts(session *mcclient.ClientSession
} else if len(results.Data) == 1 {
return results.Data[0], nil
} else {
return nil, httperrors.NewDuplicateNameError("Name %s duplicate", name)
return nil, httperrors.NewDuplicateNameError("name", name)
}
}