mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
84 lines
2.6 KiB
Go
84 lines
2.6 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/gitpod-io/gitpod/gitpod-cli/pkg/gitpod"
|
|
"github.com/gitpod-io/gitpod/supervisor/api"
|
|
"github.com/olekukonko/tablewriter"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var infoCmdOpts struct {
|
|
// Json configures whether the command output is printed as JSON, to make it machine-readable.
|
|
Json bool
|
|
}
|
|
|
|
// infoCmd represents the info command.
|
|
var infoCmd = &cobra.Command{
|
|
Use: "info",
|
|
Short: "Display workspace info, such as its ID, class, etc.",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
ctx, cancel := context.WithTimeout(cmd.Context(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
wsInfo, err := gitpod.GetWSInfo(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data := &infoData{
|
|
WorkspaceId: wsInfo.WorkspaceId,
|
|
InstanceId: wsInfo.InstanceId,
|
|
WorkspaceClass: wsInfo.WorkspaceClass,
|
|
WorkspaceUrl: wsInfo.WorkspaceUrl,
|
|
WorkspaceContextUrl: wsInfo.WorkspaceContextUrl,
|
|
ClusterHost: wsInfo.WorkspaceClusterHost,
|
|
}
|
|
|
|
if infoCmdOpts.Json {
|
|
content, _ := json.Marshal(data)
|
|
fmt.Println(string(content))
|
|
return nil
|
|
}
|
|
outputInfo(data)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
type infoData struct {
|
|
WorkspaceId string `json:"workspace_id"`
|
|
InstanceId string `json:"instance_id"`
|
|
WorkspaceClass *api.WorkspaceInfoResponse_WorkspaceClass `json:"workspace_class"`
|
|
WorkspaceUrl string `json:"workspace_url"`
|
|
WorkspaceContextUrl string `json:"workspace_context_url"`
|
|
ClusterHost string `json:"cluster_host"`
|
|
}
|
|
|
|
func outputInfo(info *infoData) {
|
|
table := tablewriter.NewWriter(os.Stdout)
|
|
table.SetColWidth(50)
|
|
table.SetBorder(false)
|
|
table.SetColumnSeparator(":")
|
|
table.Append([]string{"Workspace ID", info.WorkspaceId})
|
|
table.Append([]string{"Instance ID", info.InstanceId})
|
|
table.Append([]string{"Workspace class", fmt.Sprintf("%s: %s", info.WorkspaceClass.DisplayName, info.WorkspaceClass.Description)})
|
|
table.Append([]string{"Workspace URL", info.WorkspaceUrl})
|
|
table.Append([]string{"Workspace Context URL", info.WorkspaceContextUrl})
|
|
table.Append([]string{"Cluster host", info.ClusterHost})
|
|
table.Render()
|
|
}
|
|
|
|
func init() {
|
|
infoCmd.Flags().BoolVarP(&infoCmdOpts.Json, "json", "j", false, "Output in JSON format")
|
|
rootCmd.AddCommand(infoCmd)
|
|
}
|