From 90e9a29a4a27f6a3a0303b4ce614e987c4bd01fc Mon Sep 17 00:00:00 2001 From: mhf Date: Fri, 13 Jan 2023 11:10:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(notify):=20=E5=AF=B9=E6=89=80=E6=9C=89?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E9=BB=98=E8=AE=A4=E5=8A=A0=E5=85=A5=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=E5=91=98=E6=8E=A5=E6=94=B6=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/notify/models/initdb.go | 1 + pkg/notify/models/subscriber.go | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/pkg/notify/models/initdb.go b/pkg/notify/models/initdb.go index 0dbaca87b7..a50e062734 100644 --- a/pkg/notify/models/initdb.go +++ b/pkg/notify/models/initdb.go @@ -34,6 +34,7 @@ func InitDB() error { ReceiverNotificationManager, TopicManager, RobotManager, + SubscriberManager, } { err := manager.InitializeData() if err != nil { diff --git a/pkg/notify/models/subscriber.go b/pkg/notify/models/subscriber.go index 9f7b622b95..fa484b2763 100644 --- a/pkg/notify/models/subscriber.go +++ b/pkg/notify/models/subscriber.go @@ -49,7 +49,9 @@ import ( "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" + "yunion.io/x/onecloud/pkg/mcclient/modules/identity" modules "yunion.io/x/onecloud/pkg/mcclient/modules/identity" + "yunion.io/x/onecloud/pkg/notify/options" "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/onecloud/pkg/util/stringutils2" ) @@ -624,3 +626,46 @@ func (sm *SSubscriberManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field } return q, nil } + +func (sm *SSubscriberManager) InitializeData() error { + ctx := context.Background() + session := auth.GetAdminSession(ctx, options.Options.Region) + // 获取系统管理员角色id + params := map[string]interface{}{ + "project_domain": "default", + } + role, err := identity.RolesV3.Get(session, "admin", jsonutils.Marshal(params)) + if err != nil { + return errors.Wrap(err, "identity.RolesV3.List") + } + roleId, _ := role.GetString("id") + q := TopicManager.Query() + topics := []STopic{} + err = db.FetchModelObjects(TopicManager, q, &topics) + if err != nil { + return errors.Wrap(err, "FetchModelObjects topic") + } + for _, topic := range topics { + q := sm.Query() + q = q.Equals("topic_id", topic.Id) + q = q.Equals("type", api.SUBSCRIBER_TYPE_ROLE) + q = q.Equals("identification", roleId) + count, err := q.CountWithError() + if err != nil { + return errors.Wrap(err, "CountWithError") + } + if count != 0 { + continue + } + + subscriber := SSubscriber{} + subscriber.Type = api.SUBSCRIBER_TYPE_ROLE + subscriber.Identification = roleId + subscriber.TopicID = topic.Id + subscriber.Scope = api.SUBSCRIBER_SCOPE_SYSTEM + subscriber.ResourceScope = api.SUBSCRIBER_SCOPE_SYSTEM + subscriber.Enabled = tristate.True + sm.TableSpec().Insert(ctx, &subscriber) + } + return nil +}