Skip to content

Commit 2688092

Browse files
committed
add missing devspace cloud commands
1 parent 6e7d030 commit 2688092

File tree

1,917 files changed

+433260
-561
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,917 files changed

+433260
-561
lines changed

cmd/add/add.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package add
2+
3+
import (
4+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
5+
"github.com/spf13/cobra"
6+
)
7+
8+
// NewAddCmd creates a new cobra command
9+
func NewAddCmd(f factory.Factory) *cobra.Command {
10+
addCmd := &cobra.Command{
11+
Use: "add",
12+
Short: "Add a provider",
13+
Long: `
14+
#######################################################
15+
#################### devspace add #####################
16+
#######################################################
17+
Adds config sections to devspace.yaml
18+
`,
19+
Args: cobra.NoArgs,
20+
}
21+
22+
addCmd.AddCommand(newProviderCmd(f))
23+
return addCmd
24+
}

cmd/add/provider.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package add
2+
3+
import (
4+
"strings"
5+
6+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/cloud/config/versions/latest"
7+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
8+
9+
"github.com/pkg/errors"
10+
"github.com/spf13/cobra"
11+
)
12+
13+
type ProviderCmd struct {
14+
Host string
15+
}
16+
17+
func newProviderCmd(f factory.Factory) *cobra.Command {
18+
cmd := &ProviderCmd{}
19+
20+
addProviderCmd := &cobra.Command{
21+
Use: "provider",
22+
Short: "Adds a new cloud provider to the configuration",
23+
Long: `
24+
#######################################################
25+
############## devspace add provider ##################
26+
#######################################################
27+
Add a new cloud provider.
28+
29+
Example:
30+
devspace add provider app.devspace.cloud
31+
#######################################################
32+
`,
33+
Args: cobra.ExactArgs(1),
34+
RunE: func(cobraCmd *cobra.Command, args []string) error {
35+
return cmd.RunAddProvider(f, cobraCmd, args)
36+
},
37+
}
38+
39+
addProviderCmd.Flags().StringVar(&cmd.Host, "host", "", "The URL DevSpace should use for this provider")
40+
41+
return addProviderCmd
42+
}
43+
44+
// RunAddProvider executes the "devspace add provider" functionality
45+
func (cmd *ProviderCmd) RunAddProvider(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
46+
providerName := args[0]
47+
logger := f.GetLog()
48+
kubeLoader := f.NewKubeConfigLoader()
49+
// Get host name
50+
host := "https://" + strings.TrimRight(providerName, "/")
51+
if cmd.Host != "" {
52+
host = strings.TrimRight(cmd.Host, "/")
53+
}
54+
55+
// Get provider configuration
56+
loader := f.NewCloudConfigLoader()
57+
providerConfig, err := loader.Load()
58+
if err != nil {
59+
return errors.Wrap(err, "parse provider config")
60+
}
61+
if providerConfig.Providers == nil {
62+
providerConfig.Providers = []*latest.Provider{}
63+
}
64+
65+
// Check if provider already exists
66+
provider, _ := f.GetProvider(providerName, logger)
67+
if provider != nil {
68+
return errors.Errorf("Provider %s does already exist", providerName)
69+
}
70+
71+
// Add provider
72+
providerConfig.Providers = append(providerConfig.Providers, &latest.Provider{
73+
Name: providerName,
74+
Host: host,
75+
})
76+
77+
// Ensure user is logged in
78+
_, err = f.GetProviderWithOptions(providerName, "", true, loader, kubeLoader, logger)
79+
if err != nil {
80+
return errors.Wrap(err, "log into provider")
81+
}
82+
83+
// Switch default provider to newly added provider name
84+
providerConfig.Default = providerName
85+
86+
err = loader.Save(providerConfig)
87+
if err != nil {
88+
return errors.Wrap(err, "save provider config")
89+
}
90+
91+
logger.Donef("Successfully added cloud provider %s", providerName)
92+
return nil
93+
}

cmd/list/clusters.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package list
2+
3+
import (
4+
"strconv"
5+
6+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
7+
logpkg "github.com/devspace-cloud/devspace/pkg/util/log"
8+
9+
"github.com/mgutz/ansi"
10+
"github.com/pkg/errors"
11+
"github.com/spf13/cobra"
12+
)
13+
14+
type clustersCmd struct {
15+
Provider string
16+
All bool
17+
}
18+
19+
func newClustersCmd(f factory.Factory) *cobra.Command {
20+
cmd := &clustersCmd{}
21+
22+
clustersCmd := &cobra.Command{
23+
Use: "clusters",
24+
Short: "Lists all connected clusters",
25+
Long: `
26+
#######################################################
27+
############## devspace list clusters #################
28+
#######################################################
29+
List all connected user clusters
30+
31+
Example:
32+
devspace list clusters
33+
#######################################################
34+
`,
35+
Args: cobra.NoArgs,
36+
RunE: func(cobraCmd *cobra.Command, args []string) error {
37+
return cmd.RunListClusters(f, cobraCmd, args)
38+
}}
39+
40+
clustersCmd.Flags().StringVar(&cmd.Provider, "provider", "", "Cloud Provider to use")
41+
clustersCmd.Flags().BoolVar(&cmd.All, "all", false, "Show all available clusters including hosted DevSpace cloud clusters")
42+
43+
return clustersCmd
44+
}
45+
46+
// RunListClusters executes the "devspace list clusters" functionality
47+
func (cmd *clustersCmd) RunListClusters(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
48+
// Get provider
49+
logger := f.GetLog()
50+
provider, err := f.GetProvider(cmd.Provider, logger)
51+
if err != nil {
52+
return errors.Wrap(err, "get provider")
53+
}
54+
55+
logger.StartWait("Retrieving clusters")
56+
clusters, err := provider.Client().GetClusters()
57+
if err != nil {
58+
return errors.Errorf("Error retrieving clusters: %v", err)
59+
}
60+
logger.StopWait()
61+
62+
headerColumnNames := []string{
63+
"ID",
64+
"Name",
65+
"Owner",
66+
"Created",
67+
}
68+
69+
values := [][]string{}
70+
71+
for _, cluster := range clusters {
72+
owner := ""
73+
createdAt := ""
74+
if cluster.Owner != nil {
75+
owner = cluster.Owner.Name
76+
77+
if cluster.CreatedAt != nil {
78+
createdAt = *cluster.CreatedAt
79+
}
80+
} else if cmd.All == false {
81+
continue
82+
}
83+
84+
values = append(values, []string{
85+
strconv.Itoa(cluster.ClusterID),
86+
cluster.Name,
87+
owner,
88+
createdAt,
89+
})
90+
}
91+
92+
if len(values) > 0 {
93+
logpkg.PrintTable(logger, headerColumnNames, values)
94+
} else {
95+
logger.Infof("No clusters found. You can connect a cluster with `%s`", ansi.Color("devspace connect cluster", "white+b"))
96+
}
97+
98+
return nil
99+
}

cmd/list/list.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package list
2+
3+
import (
4+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
5+
"github.com/spf13/cobra"
6+
)
7+
8+
// NewListCmd creates a new cobra command
9+
func NewListCmd(f factory.Factory) *cobra.Command {
10+
listCmd := &cobra.Command{
11+
Use: "list",
12+
Short: "Lists configuration",
13+
Long: `
14+
#######################################################
15+
#################### devspace list ####################
16+
#######################################################
17+
`,
18+
Args: cobra.NoArgs,
19+
}
20+
21+
listCmd.AddCommand(newSpacesCmd(f))
22+
listCmd.AddCommand(newClustersCmd(f))
23+
listCmd.AddCommand(newProvidersCmd(f))
24+
return listCmd
25+
}

cmd/list/providers.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package list
2+
3+
import (
4+
"strconv"
5+
6+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
7+
"github.com/devspace-cloud/devspace/pkg/util/log"
8+
"github.com/pkg/errors"
9+
"github.com/spf13/cobra"
10+
)
11+
12+
type providersCmd struct{}
13+
14+
func newProvidersCmd(f factory.Factory) *cobra.Command {
15+
cmd := &providersCmd{}
16+
17+
providersCmd := &cobra.Command{
18+
Use: "providers",
19+
Short: "Lists all providers",
20+
Long: `
21+
#######################################################
22+
############# devspace list providers #################
23+
#######################################################
24+
Lists the providers that exist
25+
#######################################################
26+
`,
27+
Args: cobra.NoArgs,
28+
RunE: func(cobraCmd *cobra.Command, args []string) error {
29+
return cmd.RunListProviders(f, cobraCmd, args)
30+
}}
31+
32+
return providersCmd
33+
}
34+
35+
// RunListProviders runs the list providers command logic
36+
func (cmd *providersCmd) RunListProviders(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
37+
logger := f.GetLog()
38+
// Get provider configuration
39+
loader := f.NewCloudConfigLoader()
40+
providerConfig, err := loader.Load()
41+
if err != nil {
42+
return errors.Wrap(err, "log into provider")
43+
}
44+
45+
headerColumnNames := []string{
46+
"Name",
47+
"IsDefault",
48+
"Host",
49+
"Is logged in",
50+
}
51+
52+
providerRows := make([][]string, 0, len(providerConfig.Providers))
53+
54+
// Transform values into string arrays
55+
for _, provider := range providerConfig.Providers {
56+
providerRows = append(providerRows, []string{
57+
provider.Name,
58+
strconv.FormatBool(provider.Name == providerConfig.Default),
59+
provider.Host,
60+
strconv.FormatBool(provider.Key != ""),
61+
})
62+
}
63+
64+
log.PrintTable(logger, headerColumnNames, providerRows)
65+
return nil
66+
}

cmd/list/spaces.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package list
2+
3+
import (
4+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
5+
6+
"github.com/pkg/errors"
7+
"github.com/spf13/cobra"
8+
)
9+
10+
type SpacesCmd struct {
11+
Name string
12+
Provider string
13+
All bool
14+
Cluster string
15+
}
16+
17+
func newSpacesCmd(f factory.Factory) *cobra.Command {
18+
cmd := &SpacesCmd{}
19+
20+
SpacesCmd := &cobra.Command{
21+
Use: "spaces",
22+
Short: "Lists all user spaces",
23+
Long: `
24+
#######################################################
25+
############### devspace list spaces ##################
26+
#######################################################
27+
List all user cloud spaces
28+
29+
Example:
30+
devspace list spaces
31+
devspace list spaces --cluster my-cluster
32+
devspace list spaces --all
33+
#######################################################
34+
`,
35+
Args: cobra.NoArgs,
36+
RunE: func(cobraCmd *cobra.Command, args []string) error {
37+
return cmd.RunListSpaces(f, cobraCmd, args)
38+
}}
39+
40+
SpacesCmd.Flags().StringVar(&cmd.Name, "name", "", "Space name to show (default: all)")
41+
SpacesCmd.Flags().StringVar(&cmd.Provider, "provider", "", "Cloud Provider to use")
42+
SpacesCmd.Flags().StringVar(&cmd.Cluster, "cluster", "", "List all spaces in a certain cluster")
43+
SpacesCmd.Flags().BoolVar(&cmd.All, "all", false, "List all spaces the user has access to in all clusters (not only created by the user)")
44+
45+
return SpacesCmd
46+
}
47+
48+
// RunListCloudDevspaces executes the "devspace list spaces" functionality
49+
func (cmd *SpacesCmd) RunListSpaces(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
50+
logger := f.GetLog()
51+
// Get provider
52+
provider, err := f.GetProvider(cmd.Provider, logger)
53+
if err != nil {
54+
return errors.Wrap(err, "log into provider")
55+
}
56+
57+
err = provider.PrintSpaces(cmd.Cluster, cmd.Name, cmd.All)
58+
if err != nil {
59+
return err
60+
}
61+
62+
return nil
63+
}

0 commit comments

Comments
 (0)