feat: add valid filter for cachedimage list

Use the 'valid' switch to control whether to filter out
the cachedimage corresponding to invalid storage
This commit is contained in:
rainzm
2020-10-19 16:26:03 +08:00
parent 0ffda5712a
commit 18fdfad79e
3 changed files with 20 additions and 1 deletions
+1
View File
@@ -29,6 +29,7 @@ func init() {
Zone string `help:"show images cached at zone"`
HostSchedtagId string `help:"filter cached image with host schedtag"`
Valid *bool `help:"valid cachedimage"`
}
R(&CachedImageListOptions{}, "cached-image-list", "List cached images", func(s *mcclient.ClientSession, args *CachedImageListOptions) error {
params, err := options.ListStructToParams(args)
+3
View File
@@ -61,6 +61,9 @@ type CachedimageListInput struct {
// filter by host schedtag
HostSchedtagId string `json:"host_schedtag_id"`
// valid cachedimage
Valid *bool `json:"valid"`
}
type ExternalProjectListInput struct {
+16 -1
View File
@@ -711,7 +711,7 @@ func (manager *SCachedimageManager) ListItemFilter(
q, err = managedResourceFilterByRegion(q, query.RegionalFilterListInput, "id", func() *sqlchemy.SQuery {
storagecachedImages := StoragecachedimageManager.Query().SubQuery()
storageCaches := StoragecacheManager.Query().SubQuery()
storages := StorageManager.Query().In("status", []string{api.STORAGE_ENABLED, api.STORAGE_ONLINE}).IsTrue("enabled").SubQuery()
storages := StorageManager.Query().SubQuery()
zones := ZoneManager.Query().SubQuery()
subq := storagecachedImages.Query(storagecachedImages.Field("cachedimage_id"))
@@ -763,6 +763,21 @@ func (manager *SCachedimageManager) ListItemFilter(
q = q.In("id", subq.SubQuery())
}
if query.Valid != nil {
storagecachedImages := StoragecachedimageManager.Query().SubQuery()
storageCaches := StoragecacheManager.Query().SubQuery()
storages := StorageManager.Query().In("status", []string{api.STORAGE_ENABLED, api.STORAGE_ONLINE}).IsTrue("enabled").SubQuery()
subq := storagecachedImages.Query(storagecachedImages.Field("cachedimage_id"))
subq = subq.Join(storageCaches, sqlchemy.Equals(storagecachedImages.Field("storagecache_id"), storageCaches.Field("id")))
subq = subq.Join(storages, sqlchemy.Equals(storageCaches.Field("id"), storages.Field("storagecache_id")))
if *query.Valid {
q = q.In("id", subq.SubQuery())
} else {
q = q.NotIn("id", subq.SubQuery())
}
}
return q, nil
}