mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
sync storage shared info when syncing local storage
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user