diff --git a/cmd/rudrx/main.go b/cmd/rudrx/main.go index 6dae54d5e..dfd8dbfdc 100644 --- a/cmd/rudrx/main.go +++ b/cmd/rudrx/main.go @@ -84,6 +84,7 @@ func newCommand(args []string) *cobra.Command { cmds.AddCommand( cmd.NewRunCommand(f, client, ioStream, args), cmd.NewTraitsCommand(f, client, ioStream, args), + cmd.NewWorkloadsCommand(f, client, ioStream, args), cmd.NewBindCommand(f, client, ioStream, args), cmd.NewInitCommand(f, client, ioStream), cmd.NewDeleteCommand(f, client, ioStream, args), diff --git a/pkg/cmd/workloads.go b/pkg/cmd/workloads.go new file mode 100644 index 000000000..a3d33aef9 --- /dev/null +++ b/pkg/cmd/workloads.go @@ -0,0 +1,74 @@ +package cmd + +import ( + "context" + "fmt" + + cmdutil "github.com/cloud-native-application/rudrx/pkg/cmd/util" + corev1alpha2 "github.com/crossplane/oam-kubernetes-runtime/apis/core/v1alpha2" + "github.com/gosuri/uitable" + "github.com/spf13/cobra" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +func NewWorkloadsCommand(f cmdutil.Factory, c client.Client, ioStreams cmdutil.IOStreams, args []string) *cobra.Command { + ctx := context.Background() + cmd := &cobra.Command{ + Use: "workloads", + DisableFlagsInUseLine: true, + Short: "List workloads", + Long: "List workloads", + Example: `rudr workloads`, + RunE: func(cmd *cobra.Command, args []string) error { + return printWorkloadList(ctx, c, ioStreams) + }, + } + + cmd.SetOut(ioStreams.Out) + return cmd +} + +func printWorkloadList(ctx context.Context, c client.Client, ioStreams cmdutil.IOStreams) error { + workloadList, err := ListWorkloads(ctx, c) + + table := uitable.New() + table.MaxColWidth = 60 + + if err != nil { + return fmt.Errorf("Listing Trait Definition hit an issue: %s", err) + } + + table.AddRow("NAME", "SHORT", "DEFINITION") + for _, r := range workloadList { + table.AddRow(r.Name, r.Short, r.Definition) + } + ioStreams.Info(table.String()) + + return nil +} + +type WorkloadData struct { + Name string `json:"name"` + Short string `json:"shot"` + Definition string `json:"definition,omitempty"` +} + +func ListWorkloads(ctx context.Context, c client.Client) ([]WorkloadData, error) { + /* + Get trait list by optional filter `workloadName` + */ + var workloadList []WorkloadData + var workloadDefinitionList corev1alpha2.WorkloadDefinitionList + err := c.List(ctx, &workloadDefinitionList) + + for _, r := range workloadDefinitionList.Items { + + workloadList = append(workloadList, WorkloadData{ + Name: r.Name, + Short: r.ObjectMeta.Annotations["short"], + Definition: r.Spec.Reference.Name, + }) + } + + return workloadList, err +}