sync storage shared info when syncing local storage

This commit is contained in:
Qiu Jian
2020-05-18 23:19:58 +08:00
parent 7123de13ed
commit 3cdf2da320
3 changed files with 35 additions and 1 deletions
+3 -1
View File
@@ -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
+6
View File
@@ -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
}
+26
View File
@@ -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)