diff --git a/cmd/climc/shell/dbinstance_backups.go b/cmd/climc/shell/dbinstance_backups.go index 6685acb074..ca2ebe855a 100644 --- a/cmd/climc/shell/dbinstance_backups.go +++ b/cmd/climc/shell/dbinstance_backups.go @@ -38,7 +38,11 @@ func init() { if err != nil { return err } - printList(result, modules.DBInstanceBackups.GetColumns(s)) + if len(opts.ExportFile) > 0 { + exportList(result, opts.ExportFile, opts.ExportKeys, opts.ExportTexts, modules.DBInstanceBackups.GetColumns(s)) + } else { + printList(result, modules.DBInstanceBackups.GetColumns(s)) + } return nil }) diff --git a/cmd/climc/shell/dbinstances.go b/cmd/climc/shell/dbinstances.go index 104591de9a..3471da37bf 100644 --- a/cmd/climc/shell/dbinstances.go +++ b/cmd/climc/shell/dbinstances.go @@ -41,7 +41,12 @@ func init() { if err != nil { return err } - printList(result, modules.DBInstance.GetColumns(s)) + + if len(opts.ExportFile) > 0 { + exportList(result, opts.ExportFile, opts.ExportKeys, opts.ExportTexts, modules.DBInstance.GetColumns(s)) + } else { + printList(result, modules.DBInstance.GetColumns(s)) + } return nil }) diff --git a/cmd/climc/shell/networks.go b/cmd/climc/shell/networks.go index c71cb6729d..725ecd6c92 100644 --- a/cmd/climc/shell/networks.go +++ b/cmd/climc/shell/networks.go @@ -55,7 +55,11 @@ func init() { if err != nil { return err } - printList(result, modules.Networks.GetColumns(s)) + if len(opts.ExportFile) > 0 { + exportList(result, opts.ExportFile, opts.ExportKeys, opts.ExportTexts, modules.Networks.GetColumns(s)) + } else { + printList(result, modules.Networks.GetColumns(s)) + } return nil }) diff --git a/cmd/climc/shell/vpcs.go b/cmd/climc/shell/vpcs.go index c24c406743..3268871a0e 100644 --- a/cmd/climc/shell/vpcs.go +++ b/cmd/climc/shell/vpcs.go @@ -47,7 +47,11 @@ func init() { return err } - printList(result, modules.Vpcs.GetColumns(s)) + if len(opts.ExportFile) > 0 { + exportList(result, opts.ExportFile, opts.ExportKeys, opts.ExportTexts, modules.Vpcs.GetColumns(s)) + } else { + printList(result, modules.Vpcs.GetColumns(s)) + } return nil }) diff --git a/pkg/compute/models/dbinstance_backups.go b/pkg/compute/models/dbinstance_backups.go index 720fd7c948..bb4a67eae4 100644 --- a/pkg/compute/models/dbinstance_backups.go +++ b/pkg/compute/models/dbinstance_backups.go @@ -571,7 +571,7 @@ func (manager *SDBInstanceBackupManager) ListItemExportKeys(ctx context.Context, } } if keys.ContainsAny("dbinstance") { - q, err = manager.SDBInstanceResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) + q, err = manager.SDBInstanceResourceBaseManager.ListItemExportKeys(ctx, q, userCred, stringutils2.NewSortedStrings([]string{"dbinstance"})) if err != nil { return nil, errors.Wrap(err, "SDBInstanceResourceBaseManager.ListItemExportKeys") } diff --git a/pkg/compute/models/dbinstances.go b/pkg/compute/models/dbinstances.go index 5f0113681f..2cf3ebb4e0 100644 --- a/pkg/compute/models/dbinstances.go +++ b/pkg/compute/models/dbinstances.go @@ -1674,8 +1674,8 @@ func (manager *SDBInstanceManager) ListItemExportKeys(ctx context.Context, } } - if keys.ContainsAny(manager.SVpcResourceBaseManager.GetExportKeys()...) { - q, err = manager.SVpcResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) + if keys.Contains("vpc") { + q, err = manager.SVpcResourceBaseManager.ListItemExportKeys(ctx, q, userCred, stringutils2.NewSortedStrings([]string{"vpc"})) if err != nil { return nil, errors.Wrap(err, "SVpcResourceBaseManager.ListItemExportKeys") } diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 4cd55c8f2d..26ed16de1d 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -1142,5 +1142,23 @@ func (manager *SVpcManager) ListItemExportKeys(ctx context.Context, } } + if keys.Contains("wire_count") { + wires := WireManager.Query("vpc_id").SubQuery() + subq := wires.Query(sqlchemy.COUNT("wire_count"), wires.Field("vpc_id")).GroupBy(wires.Field("vpc_id")).SubQuery() + q = q.Join(subq, sqlchemy.Equals(q.Field("id"), subq.Field("vpc_id"))) + q = q.AppendField(subq.Field("wire_count")) + } + + if keys.Contains("network_count") { + wires := WireManager.Query("id", "vpc_id").SubQuery() + networks := NetworkManager.Query("wire_id").SubQuery() + subq := networks.Query(sqlchemy.COUNT("network_count"), wires.Field("vpc_id")) + subq = subq.Join(wires, sqlchemy.Equals(networks.Field("wire_id"), wires.Field("id"))) + subq = subq.GroupBy(wires.Field("vpc_id")) + subqQ := subq.SubQuery() + q = q.Join(subqQ, sqlchemy.Equals(q.Field("id"), subqQ.Field("vpc_id"))) + q = q.AppendField(subqQ.Field("network_count")) + } + return q, nil } diff --git a/pkg/compute/models/wireresource.go b/pkg/compute/models/wireresource.go index b76cda0a2a..8d4e7c0510 100644 --- a/pkg/compute/models/wireresource.go +++ b/pkg/compute/models/wireresource.go @@ -284,7 +284,7 @@ func (manager *SWireResourceBaseManager) ListItemExportKeys(ctx context.Context, q = q.AppendField(subq.Field("name", "wire")) } if keys.Contains("zone") { - q, err = manager.SZoneResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys) + q, err = manager.SZoneResourceBaseManager.ListItemExportKeys(ctx, q, userCred, stringutils2.NewSortedStrings([]string{"zone"})) if err != nil { return nil, errors.Wrap(err, "SZoneResourceBaseManager.ListItemExportKeys") }