From bb109953df8e42e6ec17e2673f325aea2c341482 Mon Sep 17 00:00:00 2001 From: rainzm Date: Mon, 9 Nov 2020 13:43:37 +0800 Subject: [PATCH] feat(region): add SExternalizedResourceBase, SManagedResourceBase to SInstanceSnapshot --- pkg/apis/compute/instance_snapshot.go | 3 ++ pkg/compute/models/instance_snapshots.go | 43 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/pkg/apis/compute/instance_snapshot.go b/pkg/apis/compute/instance_snapshot.go index d1bb4f9d52..68726a4a04 100644 --- a/pkg/apis/compute/instance_snapshot.go +++ b/pkg/apis/compute/instance_snapshot.go @@ -37,6 +37,7 @@ type SimpleSnapshot struct { type InstanceSnapshotDetails struct { apis.VirtualResourceDetails + ManagedResourceInfo SInstanceSnapshot // 云主机状态 @@ -57,6 +58,8 @@ type InstanceSnapshotDetails struct { type InstanceSnapshotListInput struct { apis.VirtualResourceListInput + apis.ExternalizedResourceBaseListInput + ManagedResourceListInput ServerFilterListInput diff --git a/pkg/compute/models/instance_snapshots.go b/pkg/compute/models/instance_snapshots.go index a97190f75c..16826cd23d 100644 --- a/pkg/compute/models/instance_snapshots.go +++ b/pkg/compute/models/instance_snapshots.go @@ -52,6 +52,8 @@ type SInstanceSnapshot struct { db.SVirtualResourceBase db.SExternalizedResourceBase + SManagedResourceBase + // 云主机Id GuestId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true"` // 云主机配置 @@ -77,6 +79,7 @@ type SInstanceSnapshot struct { type SInstanceSnapshotManager struct { db.SVirtualResourceBaseManager db.SExternalizedResourceBaseManager + SManagedResourceBaseManager } var InstanceSnapshotManager *SInstanceSnapshotManager @@ -99,6 +102,16 @@ func (manager *SInstanceSnapshotManager) ListItemFilter( return nil, errors.Wrap(err, "SVirtualResourceBaseManager.ListItemFilter") } + q, err = manager.SExternalizedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ExternalizedResourceBaseListInput) + if err != nil { + return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter") + } + + q, err = manager.SManagedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ManagedResourceListInput) + if err != nil { + return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter") + } + guestStr := query.ServerId if len(guestStr) > 0 { guestObj, err := GuestManager.FetchByIdOrName(userCred, guestStr) @@ -132,6 +145,25 @@ func (manager *SInstanceSnapshotManager) OrderByExtraFields( return nil, errors.Wrap(err, "SVirtualResourceBaseManager.OrderByExtraFields") } + q, err = manager.SManagedResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.ManagedResourceListInput) + if err != nil { + return nil, errors.Wrap(err, "SManagedResourceBaseManager.OrderByExtraFields") + } + + return q, nil +} + +func (manager *SInstanceSnapshotManager) ListItemExportKeys(ctx context.Context, + q *sqlchemy.SQuery, + userCred mcclient.TokenCredential, + keys stringutils2.SSortedStrings, +) (*sqlchemy.SQuery, error) { + var err error + q, err = manager.SVirtualResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) + if err != nil { + return nil, err + } + return q, nil } @@ -143,6 +175,11 @@ func (manager *SInstanceSnapshotManager) QueryDistinctExtraField(q *sqlchemy.SQu return q, nil } + q, err = manager.SManagedResourceBaseManager.QueryDistinctExtraField(q, field) + if err == nil { + return q, nil + } + return q, httperrors.ErrNotFound } @@ -210,10 +247,12 @@ func (manager *SInstanceSnapshotManager) FetchCustomizeColumns( rows := make([]api.InstanceSnapshotDetails, len(objs)) virtRows := manager.SVirtualResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) + manRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) for i := range rows { rows[i] = api.InstanceSnapshotDetails{ VirtualResourceDetails: virtRows[i], + ManagedResourceInfo: manRows[i], } rows[i] = objs[i].(*SInstanceSnapshot).getMoreDetails(userCred, rows[i]) } @@ -304,6 +343,8 @@ func (manager *SInstanceSnapshotManager) CreateInstanceSnapshot(ctx context.Cont instanceSnapshot.SetModelManager(manager, instanceSnapshot) instanceSnapshot.Name = name instanceSnapshot.AutoDelete = autoDelete + host := guest.GetHost() + instanceSnapshot.ManagerId = host.ManagerId manager.fillInstanceSnapshot(userCred, guest, instanceSnapshot) err := manager.TableSpec().Insert(ctx, instanceSnapshot) if err != nil { @@ -476,6 +517,8 @@ func (manager *SInstanceSnapshotManager) newFromCloudInstanceSnapshot(ctx contex } instanceSnapshot.ExternalId = extSnapshot.GetGlobalId() instanceSnapshot.Status = extSnapshot.GetStatus() + host := guest.GetHost() + instanceSnapshot.ManagerId = host.ManagerId manager.fillInstanceSnapshot(userCred, guest, &instanceSnapshot) err = manager.TableSpec().Insert(ctx, &instanceSnapshot) if err != nil {