fix: parameter get or create rpc (#15830)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2023-01-28 22:31:35 +08:00
committed by GitHub
co-authored by Qiu Jian
parent 96b3a6a0f7
commit 71e93cd202
2 changed files with 14 additions and 6 deletions
+3 -4
View File
@@ -23,7 +23,6 @@ import (
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/pkg/appctx"
"yunion.io/x/pkg/util/httputils"
"yunion.io/x/pkg/util/printutils"
"yunion.io/x/pkg/utils"
@@ -130,12 +129,12 @@ func RpcHandler(ctx context.Context, w http.ResponseWriter, req *http.Request) {
httperrors.BadGatewayError(ctx, w, "recv invalid data")
} else {
v, ok := reterr.Interface().(*httputils.JSONClientError)
ge, ok := reterr.Interface().(error)
if ok {
httperrors.JsonClientError(ctx, w, v)
je := httperrors.NewGeneralError(ge)
httperrors.GeneralServerError(ctx, w, je)
return
}
httperrors.BadGatewayError(ctx, w, fmt.Sprintf("%s", reterr.Interface()))
}
}
@@ -18,7 +18,7 @@ import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/httputils"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/auth"
@@ -61,7 +61,16 @@ func (m *ParametersManager) getParametersRpc(s *mcclient.ClientSession, key stri
return nil, err
}
if parameters.Total == 0 {
return nil, errors.Wrap(errors.ErrNotFound, key)
// if no such setting, create one
empty := jsonutils.NewDict()
empty.Add(jsonutils.NewString(key), "name")
empty.Add(jsonutils.NewDict(), "value")
empty.Add(jsonutils.NewString("yunionagent"), "service_id")
_, err := m.Create(adminSession, empty)
if err != nil && httputils.ErrorCode(err) != 409 {
return nil, err
}
return m.getParametersRpc(s, key, params)
}
return parameters.Data[0], nil
}