Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 3 additions & 19 deletions .github/docs/contribution-guide/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package bar

import (
"context"
"encoding/json"
"fmt"

"github.com/spf13/cobra"
Expand All @@ -17,7 +16,6 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/services/alb/client"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
"gopkg.in/yaml.v2"
// (...)
)

Expand Down Expand Up @@ -118,22 +116,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *foo.APIClie

// Output result based on the configured output format
func outputResult(p *print.Printer, cmd *cobra.Command, outputFormat string, resources []foo.Resource) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(resources, "", " ")
if err != nil {
return fmt.Errorf("marshal resource list: %w", err)
}
p.Outputln(string(details))
return nil
case print.YAMLOutputFormat:
details, err := yaml.Marshal(resources)
if err != nil {
return fmt.Errorf("marshal resource list: %w", err)
}
p.Outputln(string(details))
return nil
default:
// the output result handles JSON/YAML output, you can pass your own callback func for pretty (default) output format
return p.OutputResult(outputFormat, resources, func() error {
table := tables.NewTable()
table.SetHeader("ID", "NAME", "STATE")
for i := range resources {
Expand All @@ -145,5 +129,5 @@ func outputResult(p *print.Printer, cmd *cobra.Command, outputFormat string, res
return fmt.Errorf("render table: %w", err)
}
return nil
}
})
}
22 changes: 4 additions & 18 deletions internal/cmd/affinity-groups/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package create

import (
"context"
"encoding/json"
"fmt"

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
Expand Down Expand Up @@ -121,21 +119,9 @@ func outputResult(p *print.Printer, model inputModel, resp iaas.AffinityGroup) e
if model.GlobalFlagModel != nil {
outputFormat = model.GlobalFlagModel.OutputFormat
}
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(resp, "", " ")
if err != nil {
return fmt.Errorf("marshal affinity group: %w", err)
}
p.Outputln(string(details))
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(resp, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal affinity group: %w", err)
}
p.Outputln(string(details))
default:

return p.OutputResult(outputFormat, resp, func() error {
p.Outputf("Created affinity group %q with id %s\n", model.Name, utils.PtrString(resp.Id))
}
return nil
return nil
})
}
22 changes: 4 additions & 18 deletions internal/cmd/affinity-groups/describe/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package describe

import (
"context"
"encoding/json"
"fmt"

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
Expand Down Expand Up @@ -93,20 +91,8 @@ func outputResult(p *print.Printer, model inputModel, resp iaas.AffinityGroup) e
if model.GlobalFlagModel != nil {
outputFormat = model.GlobalFlagModel.OutputFormat
}
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(resp, "", " ")
if err != nil {
return fmt.Errorf("marshal affinity group: %w", err)
}
p.Outputln(string(details))
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(resp, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal affinity group: %w", err)
}
p.Outputln(string(details))
default:

return p.OutputResult(outputFormat, resp, func() error {
table := tables.NewTable()

if resp.HasId() {
Expand All @@ -129,6 +115,6 @@ func outputResult(p *print.Printer, model inputModel, resp iaas.AffinityGroup) e
if err := table.Display(p); err != nil {
return fmt.Errorf("render table: %w", err)
}
}
return nil
return nil
})
}
23 changes: 5 additions & 18 deletions internal/cmd/affinity-groups/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package list

import (
"context"
"encoding/json"
"fmt"

"github.com/goccy/go-yaml"
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
Expand Down Expand Up @@ -115,20 +113,8 @@ func outputResult(p *print.Printer, model inputModel, items []iaas.AffinityGroup
if model.GlobalFlagModel != nil {
outputFormat = model.GlobalFlagModel.OutputFormat
}
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(items, "", " ")
if err != nil {
return fmt.Errorf("marshal affinity groups: %w", err)
}
p.Outputln(string(details))
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(items, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal affinity groups: %w", err)
}
p.Outputln(string(details))
default:

return p.OutputResult(outputFormat, items, func() error {
table := tables.NewTable()
table.SetHeader("ID", "NAME", "POLICY")
for _, item := range items {
Expand All @@ -143,6 +129,7 @@ func outputResult(p *print.Printer, model inputModel, items []iaas.AffinityGroup
if err := table.Display(p); err != nil {
return fmt.Errorf("render table: %w", err)
}
}
return nil

return nil
})
}
21 changes: 2 additions & 19 deletions internal/cmd/beta/alb/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,29 +162,12 @@ func outputResult(p *print.Printer, model *inputModel, projectLabel string, resp
if resp == nil {
return fmt.Errorf("create loadbalancer response is empty")
}
switch model.OutputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(resp, "", " ")
if err != nil {
return fmt.Errorf("marshal loadbalancer: %w", err)
}
p.Outputln(string(details))

return nil
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(resp, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal loadbalancer: %w", err)
}
p.Outputln(string(details))

return nil
default:
return p.OutputResult(model.OutputFormat, resp, func() error {
operationState := "Created"
if model.Async {
operationState = "Triggered creation of"
}
p.Outputf("%s application loadbalancer for %q. Name: %s\n", operationState, projectLabel, utils.PtrString(resp.Name))
return nil
}
})
}
55 changes: 13 additions & 42 deletions internal/cmd/beta/alb/describe/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package describe

import (
"context"
"encoding/json"
"fmt"
"strings"

Expand All @@ -16,7 +15,6 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/services/alb/client"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-sdk-go/services/alb"
)
Expand Down Expand Up @@ -89,54 +87,27 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *alb.APIClie
return apiClient.GetLoadBalancer(ctx, model.ProjectId, model.Region, model.Name)
}

func outputResult(p *print.Printer, outputFormat string, response *alb.LoadBalancer) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(response, "", " ")
func outputResult(p *print.Printer, outputFormat string, loadbalancer *alb.LoadBalancer) error {
return p.OutputResult(outputFormat, loadbalancer, func() error {
content := []tables.Table{}

if err != nil {
return fmt.Errorf("marshal loadbalancer: %w", err)
content = append(content, buildLoadBalancerTable(loadbalancer))

if loadbalancer.Listeners != nil {
content = append(content, buildListenersTable(*loadbalancer.Listeners))
}
p.Outputln(string(details))

return nil
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(response, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if loadbalancer.TargetPools != nil {
content = append(content, buildTargetPoolsTable(*loadbalancer.TargetPools))
}

err := tables.DisplayTables(p, content)
if err != nil {
return fmt.Errorf("marshal loadbalancer: %w", err)
return fmt.Errorf("display output: %w", err)
}
p.Outputln(string(details))

return nil
default:
if err := outputResultAsTable(p, response); err != nil {
return err
}
}

return nil
}

func outputResultAsTable(p *print.Printer, loadbalancer *alb.LoadBalancer) error {
content := []tables.Table{}

content = append(content, buildLoadBalancerTable(loadbalancer))

if loadbalancer.Listeners != nil {
content = append(content, buildListenersTable(*loadbalancer.Listeners))
}

if loadbalancer.TargetPools != nil {
content = append(content, buildTargetPoolsTable(*loadbalancer.TargetPools))
}

err := tables.DisplayTables(p, content)
if err != nil {
return fmt.Errorf("display output: %w", err)
}

return nil
})
}

func buildLoadBalancerTable(loadbalancer *alb.LoadBalancer) tables.Table {
Expand Down
23 changes: 2 additions & 21 deletions internal/cmd/beta/alb/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package list

import (
"context"
"encoding/json"
"fmt"

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-cli/internal/cmd/params"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
Expand Down Expand Up @@ -128,24 +126,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *alb.APIClie
return request
}
func outputResult(p *print.Printer, outputFormat string, items []alb.LoadBalancer) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(items, "", " ")
if err != nil {
return fmt.Errorf("marshal loadbalancer list: %w", err)
}
p.Outputln(string(details))

return nil
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(items, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal loadbalancer list: %w", err)
}
p.Outputln(string(details))

return nil
default:
return p.OutputResult(outputFormat, items, func() error {
table := tables.NewTable()
table.SetHeader("NAME", "EXTERNAL ADDRESS", "REGION", "STATUS", "VERSION", "ERRORS")
for i := range items {
Expand All @@ -169,5 +150,5 @@ func outputResult(p *print.Printer, outputFormat string, items []alb.LoadBalance
}

return nil
}
})
}
25 changes: 4 additions & 21 deletions internal/cmd/beta/alb/observability-credentials/add/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package add

import (
"context"
"encoding/json"
"fmt"

"github.com/stackitcloud/stackit-cli/internal/cmd/params"
Expand All @@ -13,7 +12,6 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/services/alb/client"
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-sdk-go/services/alb"
)
Expand Down Expand Up @@ -115,25 +113,10 @@ func outputResult(p *print.Printer, outputFormat string, item *alb.CreateCredent
return fmt.Errorf("no credential found")
}

switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(item, "", " ")
if err != nil {
return fmt.Errorf("marshal credential: %w", err)
}
p.Outputln(string(details))
case print.YAMLOutputFormat:
details, err := yaml.MarshalWithOptions(item, yaml.IndentSequence(true), yaml.UseJSONMarshaler())
if err != nil {
return fmt.Errorf("marshal credential: %w", err)
}
p.Outputln(string(details))
default:
return p.OutputResult(outputFormat, item, func() error {
if item.Credential != nil {
p.Outputf("Created credential %s\n",
utils.PtrString(item.Credential.CredentialsRef),
)
p.Outputf("Created credential %s\n", utils.PtrString(item.Credential.CredentialsRef))
}
}
return nil
return nil
})
}
Loading
Loading