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 }