blob: 5c1822a73710993ec85c84ffbf19a203f58f80df [file] [log] [blame]
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +04001package installer
2
3import (
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +04004 "fmt"
Giorgi Lekveishvili03ee5852023-05-30 13:20:10 +04005 "io/ioutil"
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +04006
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +04007 "sigs.k8s.io/yaml"
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +04008)
9
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +040010const appDirName = "apps"
11const configFileName = "config.yaml"
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +040012const kustomizationFileName = "kustomization.yaml"
13
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +040014type AppManager struct {
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040015 repoIO RepoIO
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +040016}
17
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040018func NewAppManager(repoIO RepoIO) (*AppManager, error) {
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +040019 return &AppManager{
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040020 repoIO,
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +040021 }, nil
22}
23
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +040024func (m *AppManager) Config() (Config, error) {
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040025 configF, err := m.repoIO.Reader(configFileName)
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +040026 if err != nil {
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +040027 return Config{}, err
Giorgi Lekveishvilibd6be7f2023-05-26 15:51:28 +040028 }
29 defer configF.Close()
30 config, err := ReadConfig(configF)
31 if err != nil {
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +040032 return Config{}, err
33 }
34 return config, nil
35}
36
Giorgi Lekveishvili03ee5852023-05-30 13:20:10 +040037func (m *AppManager) AppConfig(name string) (map[string]any, error) {
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040038 configF, err := m.repoIO.Reader(fmt.Sprintf("%s/%s/%s", appDirName, name, configFileName))
Giorgi Lekveishvili03ee5852023-05-30 13:20:10 +040039 if err != nil {
40 return nil, err
41 }
42 defer configF.Close()
43 var cfg map[string]any
44 contents, err := ioutil.ReadAll(configF)
45 if err != nil {
46 return cfg, err
47 }
48 err = yaml.UnmarshalStrict(contents, &cfg)
49 return cfg, err
50}
51
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +040052func (m *AppManager) Install(app App, config map[string]any) error {
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040053 // if err := m.repoIO.Fetch(); err != nil {
54 // return err
55 // }
Giorgi Lekveishvili7efe22f2023-05-30 13:01:53 +040056 globalConfig, err := m.Config()
57 if err != nil {
58 return err
59 }
60 all := map[string]any{
61 "Global": globalConfig.Values,
62 "Values": config,
63 }
Giorgi Lekveishvili0ccd1482023-06-21 15:02:24 +040064 return m.repoIO.InstallApp(app, "apps", all)
Giorgi Lekveishvili23ef7f82023-05-26 11:57:48 +040065}