github.com/jenkins-x/jx/v2@v2.1.155/pkg/addon/config.go (about)

     1  package addon
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"path/filepath"
     7  
     8  	"github.com/jenkins-x/jx/v2/pkg/util"
     9  	"sigs.k8s.io/yaml"
    10  )
    11  
    12  //AddonConfig Addon Configuration
    13  type AddonConfig struct {
    14  	Name    string
    15  	Enabled bool
    16  }
    17  
    18  //AddonsConfig Addons Configuration
    19  type AddonsConfig struct {
    20  	Addons []*AddonConfig
    21  }
    22  
    23  // LoadAddonsConfig loads the addons configuration from the `~/.jx/addon.yml` file if it exists
    24  func LoadAddonsConfig() (*AddonsConfig, error) {
    25  	var config *AddonsConfig
    26  	fileName, err := addonConfigFileName()
    27  	if err != nil {
    28  		return config, err
    29  	}
    30  	exists, err := util.FileExists(fileName)
    31  	if err != nil {
    32  		return config, err
    33  	}
    34  	config = &AddonsConfig{}
    35  	if !exists {
    36  		return config, nil
    37  	}
    38  	data, err := ioutil.ReadFile(fileName)
    39  	if err != nil {
    40  		return config, fmt.Errorf("Failed to load file %s due to %s", fileName, err)
    41  	}
    42  	err = yaml.Unmarshal(data, &config)
    43  	if err != nil {
    44  		return config, fmt.Errorf("Failed to unmarshal YAML file %s due to %s", fileName, err)
    45  	}
    46  	return config, nil
    47  }
    48  
    49  // IsAddonEnabled returns true if the given addon is enabled
    50  func IsAddonEnabled(name string) bool {
    51  	configs, err := LoadAddonsConfig()
    52  	if err != nil {
    53  		return false
    54  	}
    55  	return configs.GetOrCreate(name).Enabled
    56  }
    57  
    58  // Save saves the addons configuration to the `~/.jx/addon.yml` file
    59  func (c *AddonsConfig) Save() error {
    60  	fileName, err := addonConfigFileName()
    61  	if err != nil {
    62  		return err
    63  	}
    64  	data, err := yaml.Marshal(c)
    65  	if err != nil {
    66  		return err
    67  	}
    68  	return ioutil.WriteFile(fileName, data, util.DefaultWritePermissions)
    69  }
    70  
    71  // GetOrCreate returns the addon configuration for the given name or creates a new config object
    72  func (c *AddonsConfig) GetOrCreate(name string) *AddonConfig {
    73  	for _, addon := range c.Addons {
    74  		if addon.Name == name {
    75  			return addon
    76  		}
    77  	}
    78  	answer := &AddonConfig{
    79  		Name: name,
    80  	}
    81  	c.Addons = append(c.Addons, answer)
    82  	return answer
    83  }
    84  
    85  func addonConfigFileName() (string, error) {
    86  	dir, err := util.ConfigDir()
    87  	if err != nil {
    88  		return "", err
    89  	}
    90  	fileName := filepath.Join(dir, "addons.yml")
    91  	return fileName, nil
    92  
    93  }