From b84f2379610b743251353c0af387d44909943c31 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Fri, 13 Nov 2020 14:50:13 +0800 Subject: [PATCH] fix: keystone init empty catalogy cause panic --- pkg/mcclient/modules/mod_policies.go | 13 +------------ pkg/mcclient/session.go | 7 ++++++- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/pkg/mcclient/modules/mod_policies.go b/pkg/mcclient/modules/mod_policies.go index 936b792e1f..d4308e1cb9 100644 --- a/pkg/mcclient/modules/mod_policies.go +++ b/pkg/mcclient/modules/mod_policies.go @@ -61,7 +61,7 @@ func policyReadFilter(session *mcclient.ClientSession, s jsonutils.JSONObject, q } func policyWriteFilter(session *mcclient.ClientSession, s jsonutils.JSONObject, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { - ret := jsonutils.NewDict() + ret := s.(*jsonutils.JSONDict).CopyExcludes("policy") if s.Contains("policy") { blobJson, err := s.Get("policy") if err != nil { @@ -78,17 +78,6 @@ func policyWriteFilter(session *mcclient.ClientSession, s jsonutils.JSONObject, // ret.Add(jsonutils.NewString(blobJson.String()), "blob") ret.Add(blobJson, "blob") } - for _, k := range []string{ - "name", "type", "enabled", "domain", "domain_id", "project_domain", "description", "is_public", "public_scope", "shared_domains", "scope", "is_system", - } { - if s.Contains(k) { - val, err := s.Get(k) - if err != nil { - return nil, err - } - ret.Add(val, k) - } - } return ret, nil } diff --git a/pkg/mcclient/session.go b/pkg/mcclient/session.go index f1348910f2..4677b83f2a 100644 --- a/pkg/mcclient/session.go +++ b/pkg/mcclient/session.go @@ -27,6 +27,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/gotypes" "yunion.io/x/pkg/utils" api "yunion.io/x/onecloud/pkg/apis/identity" @@ -147,7 +148,11 @@ func (this *ClientSession) GetServiceVersionURL(service, endpointType, apiVersio endpointType = this.endpointType } service = this.getServiceName(service, apiVersion) - url, err := this.GetServiceCatalog().GetServiceURL(service, this.region, this.zone, endpointType) + catalog := this.GetServiceCatalog() + if gotypes.IsNil(catalog) { + return this.client.authUrl, nil + } + url, err := catalog.GetServiceURL(service, this.region, this.zone, endpointType) if err != nil && service == api.SERVICE_TYPE { return this.client.authUrl, nil }