@@ -2,6 +2,7 @@ package cli
22
33import (
44 "context"
5+ "errors"
56 "io/ioutil"
67 "os"
78 "path/filepath"
@@ -12,11 +13,14 @@ import (
1213 "golang.org/x/crypto/ssh/terminal"
1314)
1415
16+ var ErrConfigPathUnknown = errors .New ("config file path unknown" )
17+
1518type CLI struct {
16- Token string
17- Endpoint string
18- Context context.Context
19- Config * Config
19+ Token string
20+ Endpoint string
21+ Context context.Context
22+ Config * Config
23+ ConfigPath string
2024
2125 RootCommand * cobra.Command
2226
@@ -25,7 +29,12 @@ type CLI struct {
2529
2630func NewCLI () * CLI {
2731 cli := & CLI {
28- Context : context .Background (),
32+ Context : context .Background (),
33+ Config : & Config {},
34+ ConfigPath : DefaultConfigPath ,
35+ }
36+ if s := os .Getenv ("HCLOUD_CONFIG" ); s != "" {
37+ cli .ConfigPath = s
2938 }
3039 cli .RootCommand = NewRootCommand (cli )
3140 return cli
@@ -40,8 +49,12 @@ func (c *CLI) ReadEnv() {
4049 }
4150}
4251
43- func (c * CLI ) ReadConfig (path string ) error {
44- data , err := ioutil .ReadFile (path )
52+ func (c * CLI ) ReadConfig () error {
53+ if c .ConfigPath == "" {
54+ return ErrConfigPathUnknown
55+ }
56+
57+ data , err := ioutil .ReadFile (c .ConfigPath )
4558 if err != nil {
4659 return err
4760 }
@@ -50,10 +63,13 @@ func (c *CLI) ReadConfig(path string) error {
5063 if err != nil {
5164 return err
5265 }
66+ if config == nil {
67+ return nil
68+ }
5369 c .Config = config
5470
55- if config .Token != "" {
56- c .Token = config .Token
71+ if config .ActiveContext != nil {
72+ c .Token = config .ActiveContext . Token
5773 }
5874 if config .Endpoint != "" {
5975 c .Endpoint = config .Endpoint
@@ -62,7 +78,10 @@ func (c *CLI) ReadConfig(path string) error {
6278 return nil
6379}
6480
65- func (c * CLI ) WriteConfig (path string ) error {
81+ func (c * CLI ) WriteConfig () error {
82+ if c .ConfigPath == "" {
83+ return ErrConfigPathUnknown
84+ }
6685 if c .Config == nil {
6786 return nil
6887 }
@@ -71,10 +90,10 @@ func (c *CLI) WriteConfig(path string) error {
7190 if err != nil {
7291 return err
7392 }
74- if err := os .MkdirAll (filepath .Dir (path ), 0777 ); err != nil {
93+ if err := os .MkdirAll (filepath .Dir (c . ConfigPath ), 0777 ); err != nil {
7594 return err
7695 }
77- if err := ioutil .WriteFile (path , data , 0600 ); err != nil {
96+ if err := ioutil .WriteFile (c . ConfigPath , data , 0600 ); err != nil {
7897 return err
7998 }
8099 return nil
0 commit comments