diff --git a/cmd/climc/shell/misc/notices.go b/cmd/climc/shell/misc/notices.go index 124433f79f..c81ffa2218 100644 --- a/cmd/climc/shell/misc/notices.go +++ b/cmd/climc/shell/misc/notices.go @@ -15,84 +15,15 @@ package misc import ( - "yunion.io/x/jsonutils" - - "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/cmd/climc/shell" "yunion.io/x/onecloud/pkg/mcclient/modules" - "yunion.io/x/onecloud/pkg/mcclient/options" + options "yunion.io/x/onecloud/pkg/mcclient/options/yunionagent" ) func init() { - type NoticesListOptions struct { - options.BaseListOptions - } - - R(&NoticesListOptions{}, "notice-list", "list notices", func(s *mcclient.ClientSession, args *NoticesListOptions) error { - params, err := options.ListStructToParams(args) - if err != nil { - return err - } - - result, err := modules.Notice.List(s, params) - if err != nil { - return err - } - printList(result, modules.Notice.GetColumns(s)) - return nil - }) - - type NoticesCreateOptions struct { - TITLE string `help:"The notice title"` - CONTENT string `help:"The notice content"` - } - - R(&NoticesCreateOptions{}, "notice-create", "create a notice", func(s *mcclient.ClientSession, args *NoticesCreateOptions) error { - params := jsonutils.NewDict() - params.Add(jsonutils.NewString(args.TITLE), "title") - params.Add(jsonutils.NewString(args.CONTENT), "content") - - notice, err := modules.Notice.Create(s, params) - if err != nil { - return err - } - printObject(notice) - return nil - }) - - type NoticesUpdateOptions struct { - ID string `help:"ID of notice to update"` - Title string `help:"The notice title"` - Content string `help:"The notice content"` - } - - R(&NoticesUpdateOptions{}, "notice-update", "update notice", func(s *mcclient.ClientSession, args *NoticesUpdateOptions) error { - params := jsonutils.NewDict() - if len(args.Title) > 0 { - params.Add(jsonutils.NewString(args.Title), "title") - } - - if len(args.Content) > 0 { - params.Add(jsonutils.NewString(args.Content), "content") - } - - notice, err := modules.Notice.Update(s, args.ID, params) - if err != nil { - return err - } - printObject(notice) - return nil - }) - - type NoticesDeleteOptions struct { - ID string `help:"ID of notice to update"` - } - - R(&NoticesDeleteOptions{}, "notice-delete", "delete notice", func(s *mcclient.ClientSession, args *NoticesDeleteOptions) error { - notice, err := modules.Notice.Delete(s, args.ID, nil) - if err != nil { - return err - } - printObject(notice) - return nil - }) + cmd := shell.NewResourceCmd(&modules.Notice).WithKeyword("notice") + cmd.List(&options.NoticeListOptions{}) + cmd.Create(&options.NoticeCreateOptions{}) + cmd.Update(&options.NoticesUpdateOptions{}) + cmd.Delete(&options.NoticeOptions{}) } diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index c543ed11a0..52b37fe778 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -1818,7 +1818,7 @@ func deleteItem(manager IModelManager, model IModel, ctx context.Context, userCr err = CustomizeDelete(model, ctx, userCred, query, data) if err != nil { log.Errorf("customize delete error: %s", err) - return nil, httperrors.NewNotAcceptableError("%v", err) + return nil, httperrors.NewGeneralError(err) } details, err := getItemDetails(manager, model, ctx, userCred, query) diff --git a/pkg/mcclient/options/yunionagent/doc.go b/pkg/mcclient/options/yunionagent/doc.go new file mode 100644 index 0000000000..b3e977a236 --- /dev/null +++ b/pkg/mcclient/options/yunionagent/doc.go @@ -0,0 +1,15 @@ +// Copyright 2019 Yunion +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yunionagent // import "yunion.io/x/onecloud/pkg/mcclient/options/yunionagent" diff --git a/pkg/mcclient/options/yunionagent/notices.go b/pkg/mcclient/options/yunionagent/notices.go new file mode 100644 index 0000000000..da2640a58a --- /dev/null +++ b/pkg/mcclient/options/yunionagent/notices.go @@ -0,0 +1,66 @@ +// Copyright 2019 Yunion +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package yunionagent + +import ( + "yunion.io/x/jsonutils" + + "yunion.io/x/onecloud/pkg/mcclient/options" +) + +type NoticeListOptions struct { + options.BaseListOptions + + VisibleScope string `help:"visiable scope" choices:"system|domain"` +} + +func (n *NoticeListOptions) Params() (jsonutils.JSONObject, error) { + return options.ListStructToParams(n) +} + +type NoticeCreateOptions struct { + TITLE string `help:"The notice title" json:"title"` + CONTENT string `help:"The notice content" json:"content"` +} + +func (n *NoticeCreateOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(n), nil +} + +type NoticeOptions struct { + ID string `help:"ID of notice to update"` +} + +func (n *NoticeOptions) GetId() string { + return n.ID +} + +func (n *NoticeOptions) Params() (jsonutils.JSONObject, error) { + return nil, nil +} + +type SnoticeUpdateOptions struct { + Title string `help:"The notice title"` + Content string `help:"The notice content"` +} + +type NoticesUpdateOptions struct { + NoticeOptions + SnoticeUpdateOptions +} + +func (n *NoticesUpdateOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(n.SnoticeUpdateOptions), nil +}