Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
10 changes: 9 additions & 1 deletion internal/cmd/ske/cluster/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/projectname"
serviceEnablementClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/service-enablement/client"
serviceEnablementUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/service-enablement/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/client"
skeUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/spinner"
Expand Down Expand Up @@ -87,8 +89,14 @@ func NewCmd(p *print.Printer) *cobra.Command {
}
}

// Configure ServiceEnable API client
serviceEnablementApiClient, err := serviceEnablementClient.ConfigureClient(p)
if err != nil {
return err
}

// Check if the project is enabled before trying to create
enabled, err := skeUtils.ProjectEnabled(ctx, apiClient, model.ProjectId)
enabled, err := serviceEnablementUtils.ProjectEnabled(ctx, serviceEnablementApiClient, model.ProjectId)
if err != nil {
return err
}
Expand Down
11 changes: 9 additions & 2 deletions internal/cmd/ske/cluster/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ import (
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/projectname"
serviceEnablementClient "github.com/stackitcloud/stackit-cli/internal/pkg/services/service-enablement/client"
serviceEnablementUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/service-enablement/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/client"
skeUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"

"github.com/spf13/cobra"
Expand Down Expand Up @@ -60,8 +61,14 @@ func NewCmd(p *print.Printer) *cobra.Command {
return err
}

// Configure ServiceEnable API client
serviceEnablementApiClient, err := serviceEnablementClient.ConfigureClient(p)
if err != nil {
return err
}

// Check if SKE is enabled for this project
enabled, err := skeUtils.ProjectEnabled(ctx, apiClient, model.ProjectId)
enabled, err := serviceEnablementUtils.ProjectEnabled(ctx, serviceEnablementApiClient, model.ProjectId)
if err != nil {
return err
}
Expand Down
125 changes: 6 additions & 119 deletions internal/cmd/ske/credentials/describe/describe.go
Original file line number Diff line number Diff line change
@@ -1,146 +1,33 @@
package describe

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

"github.com/goccy/go-yaml"
"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
"github.com/stackitcloud/stackit-cli/internal/pkg/globalflags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/client"
skeUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/ske/utils"
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"

"github.com/spf13/cobra"
"github.com/stackitcloud/stackit-sdk-go/services/ske"
)

const (
clusterNameArg = "CLUSTER_NAME"
)

type inputModel struct {
*globalflags.GlobalFlagModel
ClusterName string
}

func NewCmd(p *print.Printer) *cobra.Command {
func NewCmd(_ *print.Printer) *cobra.Command {
cmd := &cobra.Command{
Use: fmt.Sprintf("describe %s", clusterNameArg),
Short: "Shows details of the credentials associated to a SKE cluster",
Long: "Shows details of the credentials associated to a STACKIT Kubernetes Engine (SKE) cluster",
Args: args.SingleArg(clusterNameArg, nil),
Args: args.NoArgs,
Deprecated: fmt.Sprintf("%s\n%s\n%s\n%s\n",
"and will be removed in a future release.",
"and was removed.",
"Please use the following command to obtain a kubeconfig file instead:",
" $ stackit ske kubeconfig create CLUSTER_NAME",
"For more information, visit: https://docs.stackit.cloud/stackit/en/how-to-rotate-ske-credentials-200016334.html",
),
Example: examples.Build(
examples.NewExample(
`Get details of the credentials associated to the SKE cluster with name "my-cluster"`,
"$ stackit ske credentials describe my-cluster"),
examples.NewExample(
`Get details of the credentials associated to the SKE cluster with name "my-cluster" in JSON format`,
"$ stackit ske credentials describe my-cluster --output-format json"),
),
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
model, err := parseInput(p, cmd, args)
if err != nil {
return err
}

// Configure API client
apiClient, err := client.ConfigureClient(p)
if err != nil {
return err
}

// Check if SKE is enabled for this project
enabled, err := skeUtils.ProjectEnabled(ctx, apiClient, model.ProjectId)
if err != nil {
return err
}
if !enabled {
return fmt.Errorf("SKE isn't enabled for this project, please run 'stackit ske enable'")
}

// Call API
req := buildRequest(ctx, model, apiClient)
resp, err := req.Execute()
if err != nil {
return fmt.Errorf("get SKE credentials: %w", err)
}

return outputResult(p, model.OutputFormat, resp)
RunE: func(_ *cobra.Command, _ []string) error {
return nil
},
}
return cmd
}

func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) {
clusterName := inputArgs[0]

globalFlags := globalflags.Parse(p, cmd)
if globalFlags.ProjectId == "" {
return nil, &errors.ProjectIdError{}
}

model := inputModel{
GlobalFlagModel: globalFlags,
ClusterName: clusterName,
}

if p.IsVerbosityDebug() {
modelStr, err := print.BuildDebugStrFromInputModel(model)
if err != nil {
p.Debug(print.ErrorLevel, "convert model to string for debugging: %v", err)
} else {
p.Debug(print.DebugLevel, "parsed input values: %s", modelStr)
}
}

return &model, nil
}

func buildRequest(ctx context.Context, model *inputModel, apiClient *ske.APIClient) ske.ApiGetCredentialsRequest {
req := apiClient.GetCredentials(ctx, model.ProjectId, model.ClusterName) //nolint:staticcheck //command will be removed in a later update
return req
}

func outputResult(p *print.Printer, outputFormat string, credentials *ske.Credentials) error {
switch outputFormat {
case print.JSONOutputFormat:
details, err := json.MarshalIndent(credentials, "", " ")
if err != nil {
return fmt.Errorf("marshal SKE credentials: %w", err)
}
p.Outputln(string(details))

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

return nil
default:
table := tables.NewTable()
table.AddRow("SERVER", *credentials.Server)
table.AddSeparator()
table.AddRow("TOKEN", *credentials.Token)
err := table.Display(p)
if err != nil {
return fmt.Errorf("render table: %w", err)
}

return nil
}
}
Loading
Loading