From f01bed833d84545d18a6aa8b99017174a1165005 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Mon, 11 May 2020 21:06:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=AF=E6=8C=81=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E6=9C=8D=E5=8A=A1=E7=9A=84=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/mcclient/modules/mod_metadatas.go | 50 ++++++++++++++++++++++++--- pkg/mcclient/options/metadata.go | 1 + 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/pkg/mcclient/modules/mod_metadatas.go b/pkg/mcclient/modules/mod_metadatas.go index b6986f1c40..0cc203028f 100644 --- a/pkg/mcclient/modules/mod_metadatas.go +++ b/pkg/mcclient/modules/mod_metadatas.go @@ -14,15 +14,57 @@ package modules -import "yunion.io/x/onecloud/pkg/mcclient/modulebase" +import ( + "yunion.io/x/jsonutils" + + "yunion.io/x/onecloud/pkg/httperrors" + "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/mcclient/modulebase" +) + +type MetadataManager struct { + modulebase.ResourceManager +} var ( - Metadatas modulebase.ResourceManager + Metadatas MetadataManager ) func init() { - Metadatas = NewComputeManager("metadata", "metadatas", + Metadatas = MetadataManager{NewComputeManager("metadata", "metadatas", []string{"id", "key", "value"}, - []string{}) + []string{})} registerCompute(&Metadatas) } + +func (this *MetadataManager) getModule(session *mcclient.ClientSession, params jsonutils.JSONObject) (*modulebase.ResourceManager, error) { + service, _ := params.GetString("service") + if len(service) > 0 { + _, err := session.GetServiceURL(service, "") + if err != nil { + return nil, httperrors.NewNotFoundError("service %s not found error: %v", service, err) + } + } else { + service = "compute" + } + return &modulebase.ResourceManager{ + BaseManager: *modulebase.NewBaseManager(service, "", "", []string{}, []string{}), + Keyword: "metadata", KeywordPlural: "metadatas", + }, nil +} + +func (this *MetadataManager) List(session *mcclient.ClientSession, params jsonutils.JSONObject) (*modulebase.ListResult, error) { + mod, err := this.getModule(session, params) + if err != nil { + return nil, err + } + return mod.List(session, params) +} + +func (this *MetadataManager) Get(session *mcclient.ClientSession, id string, params jsonutils.JSONObject) (jsonutils.JSONObject, error) { + mod, err := this.getModule(session, params) + if err != nil { + return nil, err + } + return mod.Get(session, id, params) +} diff --git a/pkg/mcclient/options/metadata.go b/pkg/mcclient/options/metadata.go index d04d01a903..10b387922a 100644 --- a/pkg/mcclient/options/metadata.go +++ b/pkg/mcclient/options/metadata.go @@ -16,6 +16,7 @@ package options type MetadataListOptions struct { Resources []string `help:"list of resource e.g server、disk、eip、snapshot, empty will show all metadata"` + Service string `help:"service type" default:"compute"` SysMeta *bool `help:"Show sys metadata only"` CloudMeta *bool `help:"Show cloud metadata olny"`