Fix config init command

airshipctl config init command currently fails with "no such file or directory"
error, this patch fixes it.

Change-Id: I78cff26ed71bdb400ce897630102350e72dc495d
Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
This commit is contained in:
Ruslan Aliev 2020-07-10 19:37:58 -05:00
parent 1cafd674df
commit 37c044a5b7
4 changed files with 18 additions and 11 deletions

View File

@ -29,7 +29,9 @@ func NewConfigCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comma
Short: "Manage the airshipctl config file",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
log.Init(rootSettings.Debug, cmd.OutOrStderr())
if cmd.Use == "init" {
rootSettings.Create = true
}
// Load or Initialize airship Config
rootSettings.InitConfig()
},

View File

@ -83,13 +83,13 @@ type Config struct {
// LoadConfig populates the Config object using the files found at
// airshipConfigPath and kubeConfigPath
func (c *Config) LoadConfig(airshipConfigPath, kubeConfigPath string) error {
err := c.loadFromAirConfig(airshipConfigPath)
func (c *Config) LoadConfig(airshipConfigPath, kubeConfigPath string, create bool) error {
err := c.loadFromAirConfig(airshipConfigPath, create)
if err != nil {
return err
}
err = c.loadKubeConfig(kubeConfigPath)
err = c.loadKubeConfig(kubeConfigPath, create)
if err != nil {
return err
}
@ -104,7 +104,7 @@ func (c *Config) LoadConfig(airshipConfigPath, kubeConfigPath string) error {
// * airshipConfigPath is the empty string
// * the file at airshipConfigPath is inaccessible
// * the file at airshipConfigPath cannot be marshaled into Config
func (c *Config) loadFromAirConfig(airshipConfigPath string) error {
func (c *Config) loadFromAirConfig(airshipConfigPath string, create bool) error {
if airshipConfigPath == "" {
return errors.New("configuration file location was not provided")
}
@ -114,20 +114,22 @@ func (c *Config) loadFromAirConfig(airshipConfigPath string) error {
// If I can read from the file, load from it
// throw an error otherwise
if _, err := os.Stat(airshipConfigPath); err != nil {
if _, err := os.Stat(airshipConfigPath); os.IsNotExist(err) && create {
return nil
} else if err != nil {
return err
}
return util.ReadYAMLFile(airshipConfigPath, c)
}
func (c *Config) loadKubeConfig(kubeConfigPath string) error {
func (c *Config) loadKubeConfig(kubeConfigPath string, create bool) error {
// Will need this for persisting the changes
c.kubeConfigPath = kubeConfigPath
// If I can read from the file, load from it
var err error
if _, err = os.Stat(kubeConfigPath); os.IsNotExist(err) {
if _, err = os.Stat(kubeConfigPath); os.IsNotExist(err) && create {
// Default kubeconfig matching Airship target cluster
c.kubeConfig = &clientcmdapi.Config{
Clusters: map[string]*clientcmdapi.Cluster{

View File

@ -33,6 +33,7 @@ type AirshipCTLSettings struct {
Debug bool
AirshipConfigPath string
KubeConfigPath string
Create bool
Config *config.Config
}
@ -64,6 +65,8 @@ func (a *AirshipCTLSettings) InitFlags(cmd *cobra.Command) {
clientcmd.RecommendedConfigPathFlag,
"",
`Path to kubeconfig associated with airshipctl configuration. (default "`+defaultKubeConfigPath+`")`)
a.Create = false
}
// InitConfig - Initializes and loads Config it exists.
@ -74,10 +77,10 @@ func (a *AirshipCTLSettings) InitConfig() {
a.InitKubeConfigPath()
InitPluginPath()
err := a.Config.LoadConfig(a.AirshipConfigPath, a.KubeConfigPath)
err := a.Config.LoadConfig(a.AirshipConfigPath, a.KubeConfigPath, a.Create)
if err != nil {
// Should stop airshipctl
log.Fatal(err)
log.Fatal("Failed to load or initialize config: ", err)
}
}

View File

@ -190,7 +190,7 @@ func InitConfig(t *testing.T) (conf *config.Config, cleanup func(*testing.T)) {
conf = config.NewConfig()
err = conf.LoadConfig(configPath, kubeConfigPath)
err = conf.LoadConfig(configPath, kubeConfigPath, false)
require.NoError(t, err)
return conf, cleanup