diff --git a/internal/cmd/argus/grafana/describe/describe.go b/internal/cmd/argus/grafana/describe/describe.go index d73e1e7c8..9e6dc0755 100644 --- a/internal/cmd/argus/grafana/describe/describe.go +++ b/internal/cmd/argus/grafana/describe/describe.go @@ -114,7 +114,7 @@ func buildGetInstanceRequest(ctx context.Context, model *inputModel, apiClient * func outputResult(p *print.Printer, inputModel *inputModel, grafanaConfigs *argus.GrafanaConfigs, instance *argus.GetInstanceResponse) error { switch inputModel.OutputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: initialAdminPassword := *instance.Instance.GrafanaAdminPassword if inputModel.HidePassword { initialAdminPassword = "" diff --git a/internal/cmd/argus/instance/describe/describe.go b/internal/cmd/argus/instance/describe/describe.go index b8daa10ff..0361272cf 100644 --- a/internal/cmd/argus/instance/describe/describe.go +++ b/internal/cmd/argus/instance/describe/describe.go @@ -87,7 +87,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *argus.APICl func outputResult(p *print.Printer, outputFormat string, instance *argus.GetInstanceResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.Id) diff --git a/internal/cmd/argus/instance/list/list.go b/internal/cmd/argus/instance/list/list.go index 4e3fc4eae..ca1548a00 100644 --- a/internal/cmd/argus/instance/list/list.go +++ b/internal/cmd/argus/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *argus.APICl func outputResult(p *print.Printer, outputFormat string, instances []argus.ProjectInstanceFull) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal Argus instance list: %w", err) diff --git a/internal/cmd/argus/plans/plans.go b/internal/cmd/argus/plans/plans.go index a90d7d483..d68ceecb5 100644 --- a/internal/cmd/argus/plans/plans.go +++ b/internal/cmd/argus/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *argus.APICl func outputResult(p *print.Printer, outputFormat string, plans []argus.Plan) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal Argus plans: %w", err) diff --git a/internal/cmd/dns/record-set/describe/describe.go b/internal/cmd/dns/record-set/describe/describe.go index d2e74f37c..092052053 100644 --- a/internal/cmd/dns/record-set/describe/describe.go +++ b/internal/cmd/dns/record-set/describe/describe.go @@ -103,7 +103,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *dns.APIClie func outputResult(p *print.Printer, outputFormat string, recordSet *dns.RecordSet) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: recordsData := make([]string, 0, len(*recordSet.Records)) for _, r := range *recordSet.Records { recordsData = append(recordsData, *r.Content) diff --git a/internal/cmd/dns/record-set/list/list.go b/internal/cmd/dns/record-set/list/list.go index 8567377b1..70041cf19 100644 --- a/internal/cmd/dns/record-set/list/list.go +++ b/internal/cmd/dns/record-set/list/list.go @@ -224,7 +224,7 @@ func fetchRecordSets(ctx context.Context, model *inputModel, apiClient dnsClient func outputResult(p *print.Printer, outputFormat string, recordSets []dns.RecordSet) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(recordSets, "", " ") if err != nil { return fmt.Errorf("marshal DNS record set list: %w", err) diff --git a/internal/cmd/dns/zone/describe/describe.go b/internal/cmd/dns/zone/describe/describe.go index 9c028490b..840c9ffdc 100644 --- a/internal/cmd/dns/zone/describe/describe.go +++ b/internal/cmd/dns/zone/describe/describe.go @@ -88,7 +88,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *dns.APIClie func outputResult(p *print.Printer, outputFormat string, zone *dns.Zone) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *zone.Id) table.AddSeparator() diff --git a/internal/cmd/dns/zone/list/list.go b/internal/cmd/dns/zone/list/list.go index e87e7a760..220e3972f 100644 --- a/internal/cmd/dns/zone/list/list.go +++ b/internal/cmd/dns/zone/list/list.go @@ -212,7 +212,7 @@ func fetchZones(ctx context.Context, model *inputModel, apiClient dnsClient) ([] func outputResult(p *print.Printer, outputFormat string, zones []dns.Zone) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(zones, "", " ") if err != nil { diff --git a/internal/cmd/logme/credentials/describe/describe.go b/internal/cmd/logme/credentials/describe/describe.go index 9db1d99eb..ff89f1c58 100644 --- a/internal/cmd/logme/credentials/describe/describe.go +++ b/internal/cmd/logme/credentials/describe/describe.go @@ -101,7 +101,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *logme.APICl func outputResult(p *print.Printer, outputFormat string, credentials *logme.CredentialsResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *credentials.Id) table.AddSeparator() diff --git a/internal/cmd/logme/credentials/list/list.go b/internal/cmd/logme/credentials/list/list.go index 9ed4d0e33..697ab8120 100644 --- a/internal/cmd/logme/credentials/list/list.go +++ b/internal/cmd/logme/credentials/list/list.go @@ -124,7 +124,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *logme.APICl func outputResult(p *print.Printer, outputFormat string, credentials []logme.CredentialsListItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal LogMe credentials list: %w", err) diff --git a/internal/cmd/logme/instance/describe/describe.go b/internal/cmd/logme/instance/describe/describe.go index 234e57789..4c00818f9 100644 --- a/internal/cmd/logme/instance/describe/describe.go +++ b/internal/cmd/logme/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *logme.APICl func outputResult(p *print.Printer, outputFormat string, instance *logme.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.InstanceId) table.AddSeparator() diff --git a/internal/cmd/logme/instance/list/list.go b/internal/cmd/logme/instance/list/list.go index b736e2f77..1784fa8b1 100644 --- a/internal/cmd/logme/instance/list/list.go +++ b/internal/cmd/logme/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *logme.APICl func outputResult(p *print.Printer, outputFormat string, instances []logme.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal LogMe instance list: %w", err) diff --git a/internal/cmd/logme/plans/plans.go b/internal/cmd/logme/plans/plans.go index c1ac1b2d5..956961106 100644 --- a/internal/cmd/logme/plans/plans.go +++ b/internal/cmd/logme/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *logme.APICl func outputResult(p *print.Printer, outputFormat string, plans []logme.Offering) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal LogMe plans: %w", err) diff --git a/internal/cmd/mariadb/credentials/describe/describe.go b/internal/cmd/mariadb/credentials/describe/describe.go index 12c4634a4..79a01b1df 100644 --- a/internal/cmd/mariadb/credentials/describe/describe.go +++ b/internal/cmd/mariadb/credentials/describe/describe.go @@ -101,7 +101,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mariadb.API func outputResult(p *print.Printer, outputFormat string, credentials *mariadb.CredentialsResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *credentials.Id) table.AddSeparator() diff --git a/internal/cmd/mariadb/credentials/list/list.go b/internal/cmd/mariadb/credentials/list/list.go index 9c211102a..7572c4739 100644 --- a/internal/cmd/mariadb/credentials/list/list.go +++ b/internal/cmd/mariadb/credentials/list/list.go @@ -124,7 +124,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mariadb.API func outputResult(p *print.Printer, outputFormat string, credentials []mariadb.CredentialsListItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal MariaDB credentials list: %w", err) diff --git a/internal/cmd/mariadb/instance/describe/describe.go b/internal/cmd/mariadb/instance/describe/describe.go index 33b691e2a..ea605ec77 100644 --- a/internal/cmd/mariadb/instance/describe/describe.go +++ b/internal/cmd/mariadb/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mariadb.API func outputResult(p *print.Printer, outputFormat string, instance *mariadb.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.InstanceId) table.AddSeparator() diff --git a/internal/cmd/mariadb/instance/list/list.go b/internal/cmd/mariadb/instance/list/list.go index d2dc0db0a..9b40b10c5 100644 --- a/internal/cmd/mariadb/instance/list/list.go +++ b/internal/cmd/mariadb/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mariadb.API func outputResult(p *print.Printer, outputFormat string, instances []mariadb.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal MariaDB instance list: %w", err) diff --git a/internal/cmd/mariadb/plans/plans.go b/internal/cmd/mariadb/plans/plans.go index 5e3c3ae3e..2247ac65a 100644 --- a/internal/cmd/mariadb/plans/plans.go +++ b/internal/cmd/mariadb/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mariadb.API func outputResult(p *print.Printer, outputFormat string, plans []mariadb.Offering) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal MariaDB plans: %w", err) diff --git a/internal/cmd/mongodbflex/instance/describe/describe.go b/internal/cmd/mongodbflex/instance/describe/describe.go index 09406fdcd..8122917da 100644 --- a/internal/cmd/mongodbflex/instance/describe/describe.go +++ b/internal/cmd/mongodbflex/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mongodbflex func outputResult(p *print.Printer, outputFormat string, instance *mongodbflex.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: aclsArray := *instance.Acl.Items acls := strings.Join(aclsArray, ",") diff --git a/internal/cmd/mongodbflex/instance/list/list.go b/internal/cmd/mongodbflex/instance/list/list.go index b452ea592..135e23a3d 100644 --- a/internal/cmd/mongodbflex/instance/list/list.go +++ b/internal/cmd/mongodbflex/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mongodbflex func outputResult(p *print.Printer, outputFormat string, instances []mongodbflex.InstanceListInstance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal MongoDB Flex instance list: %w", err) diff --git a/internal/cmd/mongodbflex/options/options.go b/internal/cmd/mongodbflex/options/options.go index d590cc8e9..691aafdb1 100644 --- a/internal/cmd/mongodbflex/options/options.go +++ b/internal/cmd/mongodbflex/options/options.go @@ -9,7 +9,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/examples" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" - "github.com/stackitcloud/stackit-cli/internal/pkg/pager" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/mongodbflex/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" @@ -174,7 +173,7 @@ func outputResult(p *print.Printer, model *inputModel, flavors *mongodbflex.List } switch model.OutputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(options, "", " ") if err != nil { return fmt.Errorf("marshal MongoDB Flex options: %w", err) @@ -198,7 +197,7 @@ func outputResultAsTable(p *print.Printer, model *inputModel, options *options) content += renderStorages(options.Storages.Storages) } - err := pager.Display(p, content) + err := p.PagerDisplay(content) if err != nil { return fmt.Errorf("display output: %w", err) } diff --git a/internal/cmd/mongodbflex/user/describe/describe.go b/internal/cmd/mongodbflex/user/describe/describe.go index 12f694d02..73989484c 100644 --- a/internal/cmd/mongodbflex/user/describe/describe.go +++ b/internal/cmd/mongodbflex/user/describe/describe.go @@ -107,7 +107,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mongodbflex func outputResult(p *print.Printer, outputFormat string, user mongodbflex.InstanceResponseUser) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *user.Id) table.AddSeparator() diff --git a/internal/cmd/mongodbflex/user/list/list.go b/internal/cmd/mongodbflex/user/list/list.go index 6f4082375..e5dc0737e 100644 --- a/internal/cmd/mongodbflex/user/list/list.go +++ b/internal/cmd/mongodbflex/user/list/list.go @@ -127,7 +127,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *mongodbflex func outputResult(p *print.Printer, outputFormat string, users []mongodbflex.ListUser) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(users, "", " ") if err != nil { return fmt.Errorf("marshal MongoDB Flex user list: %w", err) diff --git a/internal/cmd/object-storage/bucket/describe/describe.go b/internal/cmd/object-storage/bucket/describe/describe.go index 0fd768835..afb6588bc 100644 --- a/internal/cmd/object-storage/bucket/describe/describe.go +++ b/internal/cmd/object-storage/bucket/describe/describe.go @@ -86,7 +86,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstora func outputResult(p *print.Printer, outputFormat string, bucket *objectstorage.Bucket) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("Name", *bucket.Name) table.AddSeparator() diff --git a/internal/cmd/object-storage/bucket/list/list.go b/internal/cmd/object-storage/bucket/list/list.go index 678652fd3..f925aed48 100644 --- a/internal/cmd/object-storage/bucket/list/list.go +++ b/internal/cmd/object-storage/bucket/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstora func outputResult(p *print.Printer, outputFormat string, buckets []objectstorage.Bucket) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(buckets, "", " ") if err != nil { return fmt.Errorf("marshal Object Storage bucket list: %w", err) diff --git a/internal/cmd/object-storage/credentials-group/list/list.go b/internal/cmd/object-storage/credentials-group/list/list.go index 27e7a72fc..5a6f40896 100644 --- a/internal/cmd/object-storage/credentials-group/list/list.go +++ b/internal/cmd/object-storage/credentials-group/list/list.go @@ -111,7 +111,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstora func outputResult(p *print.Printer, outputFormat string, credentialsGroups []objectstorage.CredentialsGroup) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentialsGroups, "", " ") if err != nil { return fmt.Errorf("marshal Object Storage credentials group list: %w", err) diff --git a/internal/cmd/object-storage/credentials/list/list.go b/internal/cmd/object-storage/credentials/list/list.go index 212a24df9..46d8f7b9a 100644 --- a/internal/cmd/object-storage/credentials/list/list.go +++ b/internal/cmd/object-storage/credentials/list/list.go @@ -127,7 +127,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstora func outputResult(p *print.Printer, outputFormat string, credentials []objectstorage.AccessKey) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal Object Storage credentials list: %w", err) diff --git a/internal/cmd/opensearch/credentials/describe/describe.go b/internal/cmd/opensearch/credentials/describe/describe.go index 9a79dab7f..51dc223e8 100644 --- a/internal/cmd/opensearch/credentials/describe/describe.go +++ b/internal/cmd/opensearch/credentials/describe/describe.go @@ -101,7 +101,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch. func outputResult(p *print.Printer, outputFormat string, credentials *opensearch.CredentialsResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *credentials.Id) table.AddSeparator() diff --git a/internal/cmd/opensearch/credentials/list/list.go b/internal/cmd/opensearch/credentials/list/list.go index 036122719..0ff93c567 100644 --- a/internal/cmd/opensearch/credentials/list/list.go +++ b/internal/cmd/opensearch/credentials/list/list.go @@ -124,7 +124,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch. func outputResult(p *print.Printer, outputFormat string, credentials []opensearch.CredentialsListItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal OpenSearch credentials list: %w", err) diff --git a/internal/cmd/opensearch/instance/describe/describe.go b/internal/cmd/opensearch/instance/describe/describe.go index 540e9d9e8..67af16a4d 100644 --- a/internal/cmd/opensearch/instance/describe/describe.go +++ b/internal/cmd/opensearch/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch. func outputResult(p *print.Printer, outputFormat string, instance *opensearch.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.InstanceId) table.AddSeparator() diff --git a/internal/cmd/opensearch/instance/list/list.go b/internal/cmd/opensearch/instance/list/list.go index f2a5553a2..41c38859a 100644 --- a/internal/cmd/opensearch/instance/list/list.go +++ b/internal/cmd/opensearch/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch. func outputResult(p *print.Printer, outputFormat string, instances []opensearch.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal OpenSearch instance list: %w", err) diff --git a/internal/cmd/opensearch/plans/plans.go b/internal/cmd/opensearch/plans/plans.go index 6cd981d8e..c71bf2d39 100644 --- a/internal/cmd/opensearch/plans/plans.go +++ b/internal/cmd/opensearch/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch. func outputResult(p *print.Printer, outputFormat string, plans []opensearch.Offering) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal OpenSearch plans: %w", err) diff --git a/internal/cmd/organization/member/list/list.go b/internal/cmd/organization/member/list/list.go index 9126d4b57..903ece456 100644 --- a/internal/cmd/organization/member/list/list.go +++ b/internal/cmd/organization/member/list/list.go @@ -145,7 +145,7 @@ func outputResult(p *print.Printer, model *inputModel, members []authorization.M sort.SliceStable(members, sortFn) switch model.OutputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(members, "", " ") if err != nil { diff --git a/internal/cmd/organization/role/list/list.go b/internal/cmd/organization/role/list/list.go index 708f43eec..a67e56258 100644 --- a/internal/cmd/organization/role/list/list.go +++ b/internal/cmd/organization/role/list/list.go @@ -118,7 +118,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *authorizati func outputRolesResult(p *print.Printer, outputFormat string, roles []authorization.Role) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(roles, "", " ") if err != nil { diff --git a/internal/cmd/postgresflex/instance/describe/describe.go b/internal/cmd/postgresflex/instance/describe/describe.go index 651499967..00be72fbe 100644 --- a/internal/cmd/postgresflex/instance/describe/describe.go +++ b/internal/cmd/postgresflex/instance/describe/describe.go @@ -91,7 +91,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *postgresfle func outputResult(p *print.Printer, outputFormat string, instance *postgresflex.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: aclsArray := *instance.Acl.Items acls := strings.Join(aclsArray, ",") diff --git a/internal/cmd/postgresflex/instance/list/list.go b/internal/cmd/postgresflex/instance/list/list.go index c8af818e3..b6772c525 100644 --- a/internal/cmd/postgresflex/instance/list/list.go +++ b/internal/cmd/postgresflex/instance/list/list.go @@ -121,7 +121,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *postgresfle func outputResult(p *print.Printer, outputFormat string, instances []postgresflex.InstanceListInstance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal PostgreSQL Flex instance list: %w", err) diff --git a/internal/cmd/postgresflex/options/options.go b/internal/cmd/postgresflex/options/options.go index 0ce14bc02..25e33cbee 100644 --- a/internal/cmd/postgresflex/options/options.go +++ b/internal/cmd/postgresflex/options/options.go @@ -9,7 +9,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/examples" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" - "github.com/stackitcloud/stackit-cli/internal/pkg/pager" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/postgresflex/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" @@ -174,7 +173,7 @@ func outputResult(p *print.Printer, model *inputModel, flavors *postgresflex.Lis } switch model.OutputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(options, "", " ") if err != nil { return fmt.Errorf("marshal PostgreSQL Flex options: %w", err) @@ -198,7 +197,7 @@ func outputResultAsTable(p *print.Printer, model *inputModel, options *options) content += renderStorages(options.Storages.Storages) } - err := pager.Display(p, content) + err := p.PagerDisplay(content) if err != nil { return fmt.Errorf("display output: %w", err) } diff --git a/internal/cmd/postgresflex/user/describe/describe.go b/internal/cmd/postgresflex/user/describe/describe.go index f846320ad..465ed6258 100644 --- a/internal/cmd/postgresflex/user/describe/describe.go +++ b/internal/cmd/postgresflex/user/describe/describe.go @@ -106,7 +106,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *postgresfle func outputResult(p *print.Printer, outputFormat string, user postgresflex.UserResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *user.Id) table.AddSeparator() diff --git a/internal/cmd/postgresflex/user/list/list.go b/internal/cmd/postgresflex/user/list/list.go index fb1ef6065..3a018769d 100644 --- a/internal/cmd/postgresflex/user/list/list.go +++ b/internal/cmd/postgresflex/user/list/list.go @@ -127,7 +127,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *postgresfle func outputResult(p *print.Printer, outputFormat string, users []postgresflex.ListUsersResponseItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(users, "", " ") if err != nil { return fmt.Errorf("marshal PostgreSQL Flex user list: %w", err) diff --git a/internal/cmd/project/describe/describe.go b/internal/cmd/project/describe/describe.go index a2e60535d..8e08a5327 100644 --- a/internal/cmd/project/describe/describe.go +++ b/internal/cmd/project/describe/describe.go @@ -108,7 +108,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *resourceman func outputResult(p *print.Printer, outputFormat string, project *resourcemanager.ProjectResponseWithParents) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *project.ProjectId) table.AddSeparator() diff --git a/internal/cmd/project/list/list.go b/internal/cmd/project/list/list.go index 6e4eadf39..bd521dce6 100644 --- a/internal/cmd/project/list/list.go +++ b/internal/cmd/project/list/list.go @@ -209,7 +209,7 @@ func fetchProjects(ctx context.Context, model *inputModel, apiClient resourceMan func outputResult(p *print.Printer, outputFormat string, projects []resourcemanager.ProjectResponse) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(projects, "", " ") if err != nil { return fmt.Errorf("marshal projects list: %w", err) diff --git a/internal/cmd/project/member/list/list.go b/internal/cmd/project/member/list/list.go index 4d3b98dd7..3dac8d770 100644 --- a/internal/cmd/project/member/list/list.go +++ b/internal/cmd/project/member/list/list.go @@ -147,7 +147,7 @@ func outputResult(p *print.Printer, model *inputModel, members []authorization.M sort.SliceStable(members, sortFn) switch model.OutputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(members, "", " ") if err != nil { diff --git a/internal/cmd/project/role/list/list.go b/internal/cmd/project/role/list/list.go index 103cad108..269136000 100644 --- a/internal/cmd/project/role/list/list.go +++ b/internal/cmd/project/role/list/list.go @@ -120,7 +120,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *authorizati func outputRolesResult(p *print.Printer, outputFormat string, roles []authorization.Role) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: // Show details details, err := json.MarshalIndent(roles, "", " ") if err != nil { diff --git a/internal/cmd/rabbitmq/credentials/describe/describe.go b/internal/cmd/rabbitmq/credentials/describe/describe.go index d4b0efbb3..afd0e2c5e 100644 --- a/internal/cmd/rabbitmq/credentials/describe/describe.go +++ b/internal/cmd/rabbitmq/credentials/describe/describe.go @@ -101,7 +101,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *rabbitmq.AP func outputResult(p *print.Printer, outputFormat string, credentials *rabbitmq.CredentialsResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *credentials.Id) table.AddSeparator() diff --git a/internal/cmd/rabbitmq/credentials/list/list.go b/internal/cmd/rabbitmq/credentials/list/list.go index ffb8c88b4..67d953e42 100644 --- a/internal/cmd/rabbitmq/credentials/list/list.go +++ b/internal/cmd/rabbitmq/credentials/list/list.go @@ -124,7 +124,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *rabbitmq.AP func outputResult(p *print.Printer, outputFormat string, credentials []rabbitmq.CredentialsListItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal RabbitMQ credentials list: %w", err) diff --git a/internal/cmd/rabbitmq/instance/describe/describe.go b/internal/cmd/rabbitmq/instance/describe/describe.go index 8b07f8952..95c94dc04 100644 --- a/internal/cmd/rabbitmq/instance/describe/describe.go +++ b/internal/cmd/rabbitmq/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *rabbitmq.AP func outputResult(p *print.Printer, outputFormat string, instance *rabbitmq.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.InstanceId) table.AddSeparator() diff --git a/internal/cmd/rabbitmq/instance/list/list.go b/internal/cmd/rabbitmq/instance/list/list.go index 4e0eb3b2b..ff0d66243 100644 --- a/internal/cmd/rabbitmq/instance/list/list.go +++ b/internal/cmd/rabbitmq/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *rabbitmq.AP func outputResult(p *print.Printer, outputFormat string, instances []rabbitmq.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal RabbitMQ instance list: %w", err) diff --git a/internal/cmd/rabbitmq/plans/plans.go b/internal/cmd/rabbitmq/plans/plans.go index 27ee06607..e0d9a3bd0 100644 --- a/internal/cmd/rabbitmq/plans/plans.go +++ b/internal/cmd/rabbitmq/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *rabbitmq.AP func outputResult(p *print.Printer, outputFormat string, plans []rabbitmq.Offering) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal RabbitMQ plans: %w", err) diff --git a/internal/cmd/redis/credentials/describe/describe.go b/internal/cmd/redis/credentials/describe/describe.go index fd19846a3..fb48acc3b 100644 --- a/internal/cmd/redis/credentials/describe/describe.go +++ b/internal/cmd/redis/credentials/describe/describe.go @@ -101,7 +101,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *redis.APICl func outputResult(p *print.Printer, outputFormat string, credentials *redis.CredentialsResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *credentials.Id) table.AddSeparator() diff --git a/internal/cmd/redis/credentials/list/list.go b/internal/cmd/redis/credentials/list/list.go index f1dda3102..8a048bfcd 100644 --- a/internal/cmd/redis/credentials/list/list.go +++ b/internal/cmd/redis/credentials/list/list.go @@ -124,7 +124,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *redis.APICl func outputResult(p *print.Printer, outputFormat string, credentials []redis.CredentialsListItem) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(credentials, "", " ") if err != nil { return fmt.Errorf("marshal Redis credentials list: %w", err) diff --git a/internal/cmd/redis/instance/describe/describe.go b/internal/cmd/redis/instance/describe/describe.go index 238672eb2..273a58069 100644 --- a/internal/cmd/redis/instance/describe/describe.go +++ b/internal/cmd/redis/instance/describe/describe.go @@ -89,7 +89,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *redis.APICl func outputResult(p *print.Printer, outputFormat string, instance *redis.Instance) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.InstanceId) table.AddSeparator() diff --git a/internal/cmd/redis/instance/list/list.go b/internal/cmd/redis/instance/list/list.go index da0542071..6225d050a 100644 --- a/internal/cmd/redis/instance/list/list.go +++ b/internal/cmd/redis/instance/list/list.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *redis.APICl func outputResult(p *print.Printer, outputFormat string, instances []redis.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal Redis instance list: %w", err) diff --git a/internal/cmd/redis/plans/plans.go b/internal/cmd/redis/plans/plans.go index 5834ebb0f..55ac63f29 100644 --- a/internal/cmd/redis/plans/plans.go +++ b/internal/cmd/redis/plans/plans.go @@ -119,7 +119,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *redis.APICl func outputResult(p *print.Printer, outputFormat string, plans []redis.Offering) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(plans, "", " ") if err != nil { return fmt.Errorf("marshal Redis plans: %w", err) diff --git a/internal/cmd/secrets-manager/instance/describe/describe.go b/internal/cmd/secrets-manager/instance/describe/describe.go index f54046574..b7e566c78 100644 --- a/internal/cmd/secrets-manager/instance/describe/describe.go +++ b/internal/cmd/secrets-manager/instance/describe/describe.go @@ -100,7 +100,7 @@ func buildListACLsRequest(ctx context.Context, model *inputModel, apiClient *sec func outputResult(p *print.Printer, outputFormat string, instance *secretsmanager.Instance, aclList *secretsmanager.AclList) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *instance.Id) diff --git a/internal/cmd/secrets-manager/instance/list/list.go b/internal/cmd/secrets-manager/instance/list/list.go index 6a2481253..1b4d969d2 100644 --- a/internal/cmd/secrets-manager/instance/list/list.go +++ b/internal/cmd/secrets-manager/instance/list/list.go @@ -120,7 +120,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *secretsmana func outputResult(p *print.Printer, outputFormat string, instances []secretsmanager.Instance) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(instances, "", " ") if err != nil { return fmt.Errorf("marshal Secrets Manager instance list: %w", err) diff --git a/internal/cmd/secrets-manager/user/describe/describe.go b/internal/cmd/secrets-manager/user/describe/describe.go index ff6763c74..a4eae4965 100644 --- a/internal/cmd/secrets-manager/user/describe/describe.go +++ b/internal/cmd/secrets-manager/user/describe/describe.go @@ -103,7 +103,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *secretsmana func outputResult(p *print.Printer, outputFormat string, user secretsmanager.User) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *user.Id) table.AddSeparator() diff --git a/internal/cmd/secrets-manager/user/list/list.go b/internal/cmd/secrets-manager/user/list/list.go index 6dc0c64a9..f16c1bc34 100644 --- a/internal/cmd/secrets-manager/user/list/list.go +++ b/internal/cmd/secrets-manager/user/list/list.go @@ -127,7 +127,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *secretsmana func outputResult(p *print.Printer, outputFormat string, users []secretsmanager.User) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(users, "", " ") if err != nil { return fmt.Errorf("marshal Secrets Manager user list: %w", err) diff --git a/internal/cmd/service-account/key/list/list.go b/internal/cmd/service-account/key/list/list.go index e148f615e..adda9d26a 100644 --- a/internal/cmd/service-account/key/list/list.go +++ b/internal/cmd/service-account/key/list/list.go @@ -129,7 +129,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco func outputResult(p *print.Printer, outputFormat string, keys []serviceaccount.ServiceAccountKeyListResponse) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(keys, "", " ") if err != nil { return fmt.Errorf("marshal keys metadata: %w", err) diff --git a/internal/cmd/service-account/list/list.go b/internal/cmd/service-account/list/list.go index d41304913..eac9c94ee 100644 --- a/internal/cmd/service-account/list/list.go +++ b/internal/cmd/service-account/list/list.go @@ -113,7 +113,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco func outputResult(p *print.Printer, outputFormat string, serviceAccounts []serviceaccount.ServiceAccount) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(serviceAccounts, "", " ") if err != nil { return fmt.Errorf("marshal service accounts list: %w", err) diff --git a/internal/cmd/service-account/token/list/list.go b/internal/cmd/service-account/token/list/list.go index d9162c679..c3aee60aa 100644 --- a/internal/cmd/service-account/token/list/list.go +++ b/internal/cmd/service-account/token/list/list.go @@ -133,7 +133,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *serviceacco func outputResult(p *print.Printer, outputFormat string, tokensMetadata []serviceaccount.AccessTokenMetadata) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(tokensMetadata, "", " ") if err != nil { return fmt.Errorf("marshal tokens metadata: %w", err) diff --git a/internal/cmd/ske/cluster/describe/describe.go b/internal/cmd/ske/cluster/describe/describe.go index 3283fb706..cdd7f7e9c 100644 --- a/internal/cmd/ske/cluster/describe/describe.go +++ b/internal/cmd/ske/cluster/describe/describe.go @@ -86,7 +86,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *ske.APIClie func outputResult(p *print.Printer, outputFormat string, cluster *ske.Cluster) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: acl := []string{} if cluster.Extensions != nil && cluster.Extensions.Acl != nil { diff --git a/internal/cmd/ske/cluster/list/list.go b/internal/cmd/ske/cluster/list/list.go index 22d0043c2..6855b2f18 100644 --- a/internal/cmd/ske/cluster/list/list.go +++ b/internal/cmd/ske/cluster/list/list.go @@ -129,7 +129,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *ske.APIClie func outputResult(p *print.Printer, outputFormat string, clusters []ske.Cluster) error { switch outputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(clusters, "", " ") if err != nil { return fmt.Errorf("marshal SKE cluster list: %w", err) diff --git a/internal/cmd/ske/credentials/describe/describe.go b/internal/cmd/ske/credentials/describe/describe.go index 8f079496d..5c85577e1 100644 --- a/internal/cmd/ske/credentials/describe/describe.go +++ b/internal/cmd/ske/credentials/describe/describe.go @@ -103,7 +103,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *ske.APIClie func outputResult(p *print.Printer, outputFormat string, credentials *ske.Credentials) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("SERVER", *credentials.Server) table.AddSeparator() diff --git a/internal/cmd/ske/describe/describe.go b/internal/cmd/ske/describe/describe.go index 9775418cc..e52d98158 100644 --- a/internal/cmd/ske/describe/describe.go +++ b/internal/cmd/ske/describe/describe.go @@ -75,7 +75,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *ske.APIClie func outputResult(p *print.Printer, outputFormat string, project *ske.ProjectResponse) error { switch outputFormat { - case globalflags.PrettyOutputFormat: + case print.PrettyOutputFormat: table := tables.NewTable() table.AddRow("ID", *project.ProjectId) table.AddSeparator() diff --git a/internal/cmd/ske/options/options.go b/internal/cmd/ske/options/options.go index f1657a9e4..4945d0877 100644 --- a/internal/cmd/ske/options/options.go +++ b/internal/cmd/ske/options/options.go @@ -10,7 +10,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/examples" "github.com/stackitcloud/stackit-cli/internal/pkg/flags" "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" - "github.com/stackitcloud/stackit-cli/internal/pkg/pager" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/client" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" @@ -125,7 +124,7 @@ func buildRequest(ctx context.Context, apiClient *ske.APIClient) ske.ApiListProv func outputResult(p *print.Printer, model *inputModel, options *ske.ProviderOptions) error { switch model.OutputFormat { - case globalflags.JSONOutputFormat: + case print.JSONOutputFormat: details, err := json.MarshalIndent(options, "", " ") if err != nil { return fmt.Errorf("marshal SKE options: %w", err) @@ -159,7 +158,7 @@ func outputResultAsTable(p *print.Printer, model *inputModel, options *ske.Provi content += renderVolumeTypes(options) } - err := pager.Display(p, content) + err := p.PagerDisplay(content) if err != nil { return fmt.Errorf("display output: %w", err) } diff --git a/internal/pkg/globalflags/global_flags.go b/internal/pkg/globalflags/global_flags.go index 786ddceba..aca895991 100644 --- a/internal/pkg/globalflags/global_flags.go +++ b/internal/pkg/globalflags/global_flags.go @@ -19,9 +19,6 @@ const ( ProjectIdFlag = "project-id" VerbosityFlag = "verbosity" - JSONOutputFormat = "json" - PrettyOutputFormat = "pretty" - DebugVerbosity = string(print.DebugLevel) InfoVerbosity = string(print.InfoLevel) WarningVerbosity = string(print.WarningLevel) @@ -30,7 +27,7 @@ const ( VerbosityDefault = InfoVerbosity ) -var outputFormatFlagOptions = []string{JSONOutputFormat, PrettyOutputFormat} +var outputFormatFlagOptions = []string{print.JSONOutputFormat, print.PrettyOutputFormat, print.NoneOutputFormat} var verbosityFlagOptions = []string{DebugVerbosity, InfoVerbosity, WarningVerbosity, ErrorVerbosity} type GlobalFlagModel struct { diff --git a/internal/pkg/pager/pager.go b/internal/pkg/pager/pager.go deleted file mode 100644 index b3b89104c..000000000 --- a/internal/pkg/pager/pager.go +++ /dev/null @@ -1,22 +0,0 @@ -package pager - -import ( - "fmt" - "os/exec" - "strings" - - "github.com/stackitcloud/stackit-cli/internal/pkg/print" -) - -// Shows the content in the command's stdout using the "less" command -func Display(p *print.Printer, content string) error { - lessCmd := exec.Command("less", "-F", "-S", "-w") - lessCmd.Stdin = strings.NewReader(content) - lessCmd.Stdout = p.Cmd.OutOrStdout() - - err := lessCmd.Run() - if err != nil { - return fmt.Errorf("run less command: %w", err) - } - return nil -} diff --git a/internal/pkg/print/print.go b/internal/pkg/print/print.go index 74b912ada..aadb64bed 100644 --- a/internal/pkg/print/print.go +++ b/internal/pkg/print/print.go @@ -6,9 +6,12 @@ import ( "fmt" "log/slog" "os" + "os/exec" "strings" "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/stackitcloud/stackit-cli/internal/pkg/config" ) type Level string @@ -18,6 +21,10 @@ const ( InfoLevel Level = "info" WarningLevel Level = "warning" ErrorLevel Level = "error" + + JSONOutputFormat = "json" + PrettyOutputFormat = "pretty" + NoneOutputFormat = "none" ) var errAborted = errors.New("operation aborted") @@ -36,12 +43,22 @@ func NewPrinter() *Printer { } // Print an output using Printf to the defined output (falling back to Stderr if not set). +// If output format is set to none, it does nothing func (p *Printer) Outputf(msg string, args ...any) { + outputFormat := viper.GetString(config.OutputFormatKey) + if outputFormat == NoneOutputFormat { + return + } p.Cmd.Printf(msg, args...) } // Print an output using Println to the defined output (falling back to Stderr if not set). +// If output format is set to none, it does nothing func (p *Printer) Outputln(msg string) { + outputFormat := viper.GetString(config.OutputFormatKey) + if outputFormat == NoneOutputFormat { + return + } p.Cmd.Println(msg) } @@ -112,3 +129,21 @@ func (p *Printer) PromptForConfirmation(prompt string) error { } return fmt.Errorf("max number of wrong inputs") } + +// Shows the content in the command's stdout using the "less" command +// If output format is set to none, it does nothing +func (p *Printer) PagerDisplay(content string) error { + outputFormat := viper.GetString(config.OutputFormatKey) + if outputFormat == NoneOutputFormat { + return nil + } + lessCmd := exec.Command("less", "-F", "-S", "-w") + lessCmd.Stdin = strings.NewReader(content) + lessCmd.Stdout = p.Cmd.OutOrStdout() + + err := lessCmd.Run() + if err != nil { + return fmt.Errorf("run less command: %w", err) + } + return nil +} diff --git a/internal/pkg/print/print_test.go b/internal/pkg/print/print_test.go index ac277cc97..89c06a697 100644 --- a/internal/pkg/print/print_test.go +++ b/internal/pkg/print/print_test.go @@ -9,14 +9,17 @@ import ( "testing" "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/stackitcloud/stackit-cli/internal/pkg/config" ) func TestOutputf(t *testing.T) { tests := []struct { - description string - message string - args []any - verbosity Level + description string + message string + args []any + verbosity Level + outputFormatNone bool }{ { description: "debug verbosity", @@ -44,6 +47,12 @@ func TestOutputf(t *testing.T) { message: "Test message", verbosity: ErrorLevel, }, + { + description: "output format none", + message: "Test message", + verbosity: InfoLevel, + outputFormatNone: true, + }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { @@ -54,6 +63,11 @@ func TestOutputf(t *testing.T) { Cmd: cmd, Verbosity: tt.verbosity, } + viper.Reset() + + if tt.outputFormatNone { + viper.Set(config.OutputFormatKey, NoneOutputFormat) + } if len(tt.args) == 0 { p.Outputf(tt.message) @@ -61,10 +75,14 @@ func TestOutputf(t *testing.T) { p.Outputf(tt.message, tt.args...) } - expectedOutput := tt.message - if len(tt.args) > 0 { - expectedOutput = fmt.Sprintf(tt.message, tt.args...) + var expectedOutput string + if !tt.outputFormatNone { + expectedOutput = tt.message + if len(tt.args) > 0 { + expectedOutput = fmt.Sprintf(tt.message, tt.args...) + } } + output := buf.String() if output != expectedOutput { t.Errorf("unexpected output: got %q, want %q", output, expectedOutput) @@ -75,9 +93,10 @@ func TestOutputf(t *testing.T) { func TestOutputln(t *testing.T) { tests := []struct { - description string - message string - verbosity Level + description string + message string + verbosity Level + outputFormatNone bool }{ { description: "debug verbosity", @@ -99,6 +118,12 @@ func TestOutputln(t *testing.T) { message: "Test message", verbosity: ErrorLevel, }, + { + description: "output format none", + message: "Test message", + verbosity: InfoLevel, + outputFormatNone: true, + }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { @@ -109,10 +134,85 @@ func TestOutputln(t *testing.T) { Cmd: cmd, Verbosity: tt.verbosity, } + viper.Reset() + + if tt.outputFormatNone { + viper.Set(config.OutputFormatKey, NoneOutputFormat) + } p.Outputln(tt.message) - expectedOutput := fmt.Sprintf("%s\n", tt.message) + var expectedOutput string + if !tt.outputFormatNone { + expectedOutput = fmt.Sprintf("%s\n", tt.message) + } + + output := buf.String() + if output != expectedOutput { + t.Errorf("unexpected output: got %q, want %q", output, expectedOutput) + } + }) + } +} + +func TestPagerDisplay(t *testing.T) { + tests := []struct { + description string + content string + verbosity Level + outputFormatNone bool + }{ + { + description: "debug verbosity", + content: "Test message", + verbosity: DebugLevel, + }, + { + description: "info verbosity", + content: "Test message", + verbosity: InfoLevel, + }, + { + description: "warning verbosity", + content: "Test message", + verbosity: WarningLevel, + }, + { + description: "error verbosity", + content: "Test message", + verbosity: ErrorLevel, + }, + { + description: "output format none", + content: "Test message", + verbosity: InfoLevel, + outputFormatNone: true, + }, + } + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + var buf bytes.Buffer + cmd := &cobra.Command{} + cmd.SetOutput(&buf) + p := &Printer{ + Cmd: cmd, + Verbosity: tt.verbosity, + } + viper.Reset() + + if tt.outputFormatNone { + viper.Set(config.OutputFormatKey, NoneOutputFormat) + } + + err := p.PagerDisplay(tt.content) + if err != nil { + t.Fatalf("unexpected error: %s", err.Error()) + } + var expectedOutput string + if !tt.outputFormatNone { + expectedOutput = tt.content + } + output := buf.String() if output != expectedOutput { t.Errorf("unexpected output: got %q, want %q", output, expectedOutput) diff --git a/internal/pkg/tables/tables.go b/internal/pkg/tables/tables.go index 45ea21efb..a60de1fc8 100644 --- a/internal/pkg/tables/tables.go +++ b/internal/pkg/tables/tables.go @@ -3,7 +3,6 @@ package tables import ( "fmt" - "github.com/stackitcloud/stackit-cli/internal/pkg/pager" "github.com/stackitcloud/stackit-cli/internal/pkg/print" "github.com/jedib0t/go-pretty/v6/table" @@ -58,5 +57,5 @@ func (t *Table) Render() string { // Displays the table in the command's stdout func (t *Table) Display(p *print.Printer) error { - return pager.Display(p, t.Render()) + return p.PagerDisplay(t.Render()) }