Skip to content

Commit 4ecc3a4

Browse files
committed
add predefined vars
1 parent 2688092 commit 4ecc3a4

File tree

6 files changed

+241
-3
lines changed

6 files changed

+241
-3
lines changed

cmd/root.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/devspace-cloud/devspace-cloud-plugin/cmd/reset"
1111
"github.com/devspace-cloud/devspace-cloud-plugin/cmd/set"
1212
"github.com/devspace-cloud/devspace-cloud-plugin/cmd/use"
13+
"github.com/devspace-cloud/devspace-cloud-plugin/cmd/vars"
1314
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
1415
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/upgrade"
1516
"github.com/devspace-cloud/devspace/pkg/util/exit"
@@ -101,6 +102,7 @@ func BuildRoot(f factory.Factory) *cobra.Command {
101102
rootCmd.AddCommand(remove.NewRemoveCmd(f))
102103
rootCmd.AddCommand(reset.NewResetCmd(f))
103104
rootCmd.AddCommand(set.NewSetCmd(f))
105+
rootCmd.AddCommand(vars.NewVarsCmd(f))
104106

105107
// Add base commands
106108
rootCmd.AddCommand(NewLoginCmd(f))

cmd/vars/space.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package vars
2+
3+
import (
4+
"fmt"
5+
cloudconfig "github.com/devspace-cloud/devspace-cloud-plugin/pkg/cloud/config"
6+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
7+
"github.com/mgutz/ansi"
8+
"os"
9+
10+
"github.com/spf13/cobra"
11+
)
12+
13+
type spaceCmd struct{}
14+
15+
func newSpaceCmd(f factory.Factory) *cobra.Command {
16+
cmd := &spaceCmd{}
17+
18+
return &cobra.Command{
19+
Use: "space",
20+
Short: "Prints the current space",
21+
Args: cobra.NoArgs,
22+
RunE: func(cobraCmd *cobra.Command, args []string) error {
23+
return cmd.Run(f, cobraCmd, args)
24+
},
25+
}
26+
}
27+
28+
// Run executes the command logic
29+
func (*spaceCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
30+
retError := fmt.Errorf("Current context is not a space, but predefined var DEVSPACE_SPACE is used.\n\nPlease run: \n- `%s` to create a new space\n- `%s` to use an existing space\n- `%s` to list existing spaces", ansi.Color("devspace create space [NAME]", "white+b"), ansi.Color("devspace use space [NAME]", "white+b"), ansi.Color("devspace list spaces", "white+b"))
31+
kubeLoader := f.NewKubeConfigLoader()
32+
kubeContext, err := kubeLoader.GetCurrentContext()
33+
if err != nil {
34+
return err
35+
}
36+
if os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG") != "" {
37+
kubeContext = os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG")
38+
}
39+
40+
isSpace, err := kubeLoader.IsCloudSpace(kubeContext)
41+
if err != nil || !isSpace {
42+
return retError
43+
}
44+
45+
spaceID, providerName, err := kubeLoader.GetSpaceID(kubeContext)
46+
if err != nil {
47+
return err
48+
}
49+
50+
loader := cloudconfig.NewLoader()
51+
cloudConfigData, err := loader.Load()
52+
if err != nil {
53+
return retError
54+
}
55+
56+
provider := cloudconfig.GetProvider(cloudConfigData, providerName)
57+
if provider == nil {
58+
return retError
59+
}
60+
if provider.Spaces == nil {
61+
return retError
62+
}
63+
if provider.Spaces[spaceID] == nil {
64+
return retError
65+
}
66+
67+
_, err = os.Stdout.Write([]byte(provider.Spaces[spaceID].Space.Name))
68+
return err
69+
}

cmd/vars/space_namespace.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package vars
2+
3+
import (
4+
"fmt"
5+
cloudconfig "github.com/devspace-cloud/devspace-cloud-plugin/pkg/cloud/config"
6+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
7+
"github.com/mgutz/ansi"
8+
"os"
9+
10+
"github.com/spf13/cobra"
11+
)
12+
13+
type spaceNamespaceCmd struct{}
14+
15+
func newSpaceNamespaceCmd(f factory.Factory) *cobra.Command {
16+
cmd := &spaceNamespaceCmd{}
17+
18+
return &cobra.Command{
19+
Use: "space-namespace",
20+
Short: "Prints the current spaces namespace",
21+
Args: cobra.NoArgs,
22+
RunE: func(cobraCmd *cobra.Command, args []string) error {
23+
return cmd.Run(f, cobraCmd, args)
24+
},
25+
}
26+
}
27+
28+
// Run executes the command logic
29+
func (*spaceNamespaceCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
30+
retErr := fmt.Errorf("Current context is not a space, but predefined var DEVSPACE_SPACE_NAMESPACE is used.\n\nPlease run: \n- `%s` to create a new space\n- `%s` to use an existing space\n- `%s` to list existing spaces", ansi.Color("devspace create space [NAME]", "white+b"), ansi.Color("devspace use space [NAME]", "white+b"), ansi.Color("devspace list spaces", "white+b"))
31+
kubeLoader := f.NewKubeConfigLoader()
32+
kubeContext, err := kubeLoader.GetCurrentContext()
33+
if err != nil {
34+
return err
35+
}
36+
if os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG") != "" {
37+
kubeContext = os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG")
38+
}
39+
40+
isSpace, err := kubeLoader.IsCloudSpace(kubeContext)
41+
if err != nil || !isSpace {
42+
return retErr
43+
}
44+
45+
spaceID, providerName, err := kubeLoader.GetSpaceID(kubeContext)
46+
if err != nil {
47+
return err
48+
}
49+
50+
loader := cloudconfig.NewLoader()
51+
cloudConfigData, err := loader.Load()
52+
if err != nil {
53+
return retErr
54+
}
55+
56+
provider := cloudconfig.GetProvider(cloudConfigData, providerName)
57+
if provider == nil {
58+
return retErr
59+
}
60+
if provider.Spaces == nil {
61+
return retErr
62+
}
63+
if provider.Spaces[spaceID] == nil {
64+
return retErr
65+
}
66+
67+
_, err = os.Stdout.Write([]byte(provider.Spaces[spaceID].ServiceAccount.Namespace))
68+
return err
69+
}

cmd/vars/username.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package vars
2+
3+
import (
4+
"fmt"
5+
cloudconfig "github.com/devspace-cloud/devspace-cloud-plugin/pkg/cloud/config"
6+
cloudtoken "github.com/devspace-cloud/devspace-cloud-plugin/pkg/cloud/token"
7+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
8+
"github.com/mgutz/ansi"
9+
"os"
10+
11+
"github.com/spf13/cobra"
12+
)
13+
14+
type usernameCmd struct{}
15+
16+
func newUsernameCmd(f factory.Factory) *cobra.Command {
17+
cmd := &usernameCmd{}
18+
19+
return &cobra.Command{
20+
Use: "username",
21+
Short: "Prints the current username",
22+
Args: cobra.NoArgs,
23+
RunE: func(cobraCmd *cobra.Command, args []string) error {
24+
return cmd.Run(f, cobraCmd, args)
25+
},
26+
}
27+
}
28+
29+
// Run executes the command logic
30+
func (*usernameCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []string) error {
31+
retErr := fmt.Errorf("You are not logged into DevSpace Cloud, but predefined var DEVSPACE_USERNAME is used.\n\nPlease run: \n- `%s` to login into devspace cloud. Alternatively you can also remove the variable ${DEVSPACE_USERNAME} from your config", ansi.Color("devspace login", "white+b"))
32+
33+
kubeLoader := f.NewKubeConfigLoader()
34+
kubeContext, err := kubeLoader.GetCurrentContext()
35+
if err != nil {
36+
return err
37+
}
38+
if os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG") != "" {
39+
kubeContext = os.Getenv("DEVSPACE_PLUGIN_KUBE_CONTEXT_FLAG")
40+
}
41+
42+
loader := cloudconfig.NewLoader()
43+
cloudConfigData, err := loader.Load()
44+
if err != nil {
45+
return err
46+
}
47+
48+
_, providerName, err := kubeLoader.GetSpaceID(kubeContext)
49+
if err != nil {
50+
// use global provider config as fallback
51+
if cloudConfigData.Default != "" {
52+
providerName = cloudConfigData.Default
53+
} else {
54+
providerName = cloudconfig.DevSpaceCloudProviderName
55+
}
56+
}
57+
58+
provider := cloudconfig.GetProvider(cloudConfigData, providerName)
59+
if provider == nil {
60+
return retErr
61+
}
62+
if provider.Token == "" {
63+
return retErr
64+
}
65+
66+
accountName, err := cloudtoken.GetAccountName(provider.Token)
67+
if err != nil {
68+
return retErr
69+
}
70+
71+
_, err = os.Stdout.Write([]byte(accountName))
72+
return err
73+
}

cmd/vars/vars.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package vars
2+
3+
import (
4+
"github.com/devspace-cloud/devspace-cloud-plugin/pkg/factory"
5+
"github.com/spf13/cobra"
6+
)
7+
8+
// NewVarsCmd creates a new cobra command for the sub command
9+
func NewVarsCmd(f factory.Factory) *cobra.Command {
10+
cmd := &cobra.Command{
11+
Use: "vars",
12+
Short: "Print predefined variables",
13+
Long: `
14+
#######################################################
15+
################### devspace vars #####################
16+
#######################################################
17+
`,
18+
Args: cobra.NoArgs,
19+
}
20+
21+
cmd.AddCommand(newUsernameCmd(f))
22+
cmd.AddCommand(newSpaceNamespaceCmd(f))
23+
cmd.AddCommand(newSpaceCmd(f))
24+
return cmd
25+
}

plugin.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ commands:
4242
subCommand: "use"
4343
vars:
4444
- name: DEVSPACE_SPACE
45-
baseArgs: ["var", "space"]
45+
baseArgs: ["vars", "space"]
4646
- name: DEVSPACE_SPACE_NAMESPACE
47-
baseArgs: ["var", "space-namespace"]
47+
baseArgs: ["vars", "space-namespace"]
4848
- name: DEVSPACE_USERNAME
49-
baseArgs: ["var", "username"]
49+
baseArgs: ["vars", "username"]
5050
binaries:
5151
- os: darwin
5252
arch: amd64

0 commit comments

Comments
 (0)