From 3cdf2da3202b44aa7bb599b914726fe43f06918e Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 18 May 2020 21:52:38 +0800 Subject: [PATCH] sync storage shared info when syncing local storage --- pkg/cloudcommon/db/sharablebase.go | 4 +++- pkg/compute/models/hosts.go | 6 ++++++ pkg/compute/models/hoststorages.go | 26 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/pkg/cloudcommon/db/sharablebase.go b/pkg/cloudcommon/db/sharablebase.go index e7213633a0..a470730c9f 100644 --- a/pkg/cloudcommon/db/sharablebase.go +++ b/pkg/cloudcommon/db/sharablebase.go @@ -537,7 +537,9 @@ func SharableModelIsShared(model ISharableBaseModel) bool { } switch model.GetPublicScope() { case rbacutils.ScopeSystem: - return true + if model.GetIsPublic() { + return true + } case rbacutils.ScopeDomain: if model.GetModelManager().ResourceScope() == rbacutils.ScopeProject { return true diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 939833bed1..2f186cec58 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -828,6 +828,8 @@ func (self *SHost) PerformUpdateStorage( storage.Enabled = tristate.True storage.ZoneId = zoneId storage.StoragecacheId = storageCacheId + storage.DomainId = self.DomainId + storage.DomainSrc = string(apis.OWNER_SOURCE_LOCAL) err := StorageManager.TableSpec().Insert(&storage) if err != nil { return nil, fmt.Errorf("Create baremetal storage error: %v", err) @@ -846,6 +848,7 @@ func (self *SHost) PerformUpdateStorage( } bmStorage.SetModelManager(HoststorageManager, &bmStorage) db.OpsLog.LogAttachEvent(ctx, self, &storage, userCred, bmStorage.GetShortDesc(ctx)) + bmStorage.syncLocalStorageShare(ctx, userCred) return nil, nil } storage := bs.GetStorage() @@ -854,12 +857,15 @@ func (self *SHost) PerformUpdateStorage( storage.Capacity = capacity storage.StoragecacheId = storageCacheId storage.Enabled = tristate.True + storage.DomainId = self.DomainId + storage.DomainSrc = string(apis.OWNER_SOURCE_LOCAL) return nil }) if err != nil { return nil, fmt.Errorf("Update baremetal storage error: %v", err) } db.OpsLog.LogEvent(storage, db.ACT_UPDATE, diff, userCred) + bs.syncLocalStorageShare(ctx, userCred) //} return nil, nil } diff --git a/pkg/compute/models/hoststorages.go b/pkg/compute/models/hoststorages.go index 18569e00cf..add607e8bc 100644 --- a/pkg/compute/models/hoststorages.go +++ b/pkg/compute/models/hoststorages.go @@ -190,9 +190,35 @@ func (manager *SHoststorageManager) ValidateCreateData(ctx context.Context, user return data, nil } +func (self *SHoststorage) syncLocalStorageShare(ctx context.Context, userCred mcclient.TokenCredential) { + // sync host and local storage permissions + host := self.GetHost() + storage := self.GetStorage() + if host != nil && storage != nil && storage.IsLocal() { + shareInfo := host.GetSharedInfo() + if !shareInfo.IsPublic { + _, err := storage.performPrivateInternal(ctx, userCred, nil, apis.PerformPrivateInput{}) + if err != nil { + log.Errorf("attach storage: private local storage fail %s", err) + } + } else { + input := apis.PerformPublicDomainInput{ + Scope: string(shareInfo.PublicScope), + SharedDomains: shareInfo.SharedDomains, + } + _, err := storage.performPublicInternal(ctx, userCred, nil, input) + if err != nil { + log.Errorf("attach storage: public local storage fail %s", err) + } + } + } +} + func (self *SHoststorage) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { self.SHostJointsBase.PostCreate(ctx, userCred, ownerId, query, data) + self.syncLocalStorageShare(ctx, userCred) + if err := self.StartHostStorageAttachTask(ctx, userCred); err != nil { log.Errorf("failed to attach storage error: %v", err) self.Detach(ctx, userCred)