From 5ac7edf489fc89139e3bb4081bdb681fc9939d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Tue, 12 Nov 2024 11:16:18 +0800 Subject: [PATCH] fix(region): filter unused snapshot (#21563) --- cmd/climc/shell/compute/snapshots.go | 1 + pkg/apis/compute/snapshot.go | 3 +++ pkg/compute/models/snapshots.go | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/cmd/climc/shell/compute/snapshots.go b/cmd/climc/shell/compute/snapshots.go index 368bf8fd75..04016dab59 100644 --- a/cmd/climc/shell/compute/snapshots.go +++ b/cmd/climc/shell/compute/snapshots.go @@ -32,6 +32,7 @@ func init() { Share *bool `help:"Show shared snapshots"` DiskType string `help:"Filter by disk type" choices:"sys|data"` Server string `help:"Filter by server" json:"server_id"` + Unused bool OrderByGuest string OrderByDiskName string diff --git a/pkg/apis/compute/snapshot.go b/pkg/apis/compute/snapshot.go index ebfe4dfa4a..360866bfcf 100644 --- a/pkg/apis/compute/snapshot.go +++ b/pkg/apis/compute/snapshot.go @@ -74,6 +74,9 @@ type SnapshotListInput struct { // list server snapshots ServerId string `json:"server_id"` + // 未关联任何磁盘 + Unused bool `json:"unused"` + // 按虚拟机名称排序 // pattern:asc|desc OrderByGuest string `json:"order_by_guest"` diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index 50616dfac8..20f756d863 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -205,6 +205,11 @@ func (manager *SSnapshotManager) ListItemFilter( q = q.In("disk_id", gdq) } + if query.Unused { + sq := DiskManager.Query("id").Distinct().SubQuery() + q = q.NotIn("disk_id", sq) + } + return q, nil }