diff --git a/cmd/ctrlc/root/api/get/deployments/deployments.go b/cmd/ctrlc/root/api/get/deployments/deployments.go new file mode 100644 index 0000000..de69d8c --- /dev/null +++ b/cmd/ctrlc/root/api/get/deployments/deployments.go @@ -0,0 +1,59 @@ +package deployments + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewDeploymentsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "deployments", + Short: "Get deployments", + Long: `Commands for getting deployments.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListDeploymentsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListDeployments(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get deployments: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +} diff --git a/cmd/ctrlc/root/api/get/environments/environments.go b/cmd/ctrlc/root/api/get/environments/environments.go new file mode 100644 index 0000000..c9f2929 --- /dev/null +++ b/cmd/ctrlc/root/api/get/environments/environments.go @@ -0,0 +1,59 @@ +package environments + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewEnvironmentsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "environments", + Short: "Get environments", + Long: `Commands for getting environments.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListEnvironmentsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListEnvironments(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get environments: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +} diff --git a/cmd/ctrlc/root/api/get/get.go b/cmd/ctrlc/root/api/get/get.go index 4f391a8..f90e472 100644 --- a/cmd/ctrlc/root/api/get/get.go +++ b/cmd/ctrlc/root/api/get/get.go @@ -1,8 +1,11 @@ package get import ( + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/deployments" + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/environments" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/release" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/resources" + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/systems" "github.com/spf13/cobra" ) @@ -18,6 +21,9 @@ func NewGetCmd() *cobra.Command { cmd.AddCommand(resources.NewResourcesCmd()) cmd.AddCommand(release.NewReleaseCmd()) + cmd.AddCommand(environments.NewEnvironmentsCmd()) + cmd.AddCommand(systems.NewSystemsCmd()) + cmd.AddCommand(deployments.NewDeploymentsCmd()) return cmd } diff --git a/cmd/ctrlc/root/api/get/systems/systems.go b/cmd/ctrlc/root/api/get/systems/systems.go new file mode 100644 index 0000000..8db5308 --- /dev/null +++ b/cmd/ctrlc/root/api/get/systems/systems.go @@ -0,0 +1,59 @@ +package systems + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewSystemsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "systems", + Short: "Get systems", + Long: `Commands for getting systems.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListSystemsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListSystems(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get systems: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +}