appmanager: list and update app instances
diff --git a/core/installer/app_manager.go b/core/installer/app_manager.go
index fccf0b2..c0a619f 100644
--- a/core/installer/app_manager.go
+++ b/core/installer/app_manager.go
@@ -1,14 +1,13 @@
package installer
import (
- "fmt"
"io/ioutil"
"path/filepath"
"sigs.k8s.io/yaml"
)
-const appDirName = "apps"
+const appDir = "/apps"
const configFileName = "config.yaml"
const kustomizationFileName = "kustomization.yaml"
@@ -28,16 +27,24 @@
return m.repoIO.ReadConfig()
}
-func (m *AppManager) AppConfig(name string) (map[string]any, error) {
- configF, err := m.repoIO.Reader(fmt.Sprintf("%s/%s/%s", appDirName, name, configFileName))
+func (m *AppManager) FindAllInstances(name string) ([]AppConfig, error) {
+ return m.repoIO.FindAllInstances(appDir, name)
+}
+
+func (m *AppManager) FindInstance(name string) (AppConfig, error) {
+ return m.repoIO.FindInstance(appDir, name)
+}
+
+func (m *AppManager) AppConfig(name string) (AppConfig, error) {
+ configF, err := m.repoIO.Reader(filepath.Join(appDir, name, configFileName))
if err != nil {
- return nil, err
+ return AppConfig{}, err
}
defer configF.Close()
- var cfg map[string]any
+ var cfg AppConfig
contents, err := ioutil.ReadAll(configF)
if err != nil {
- return cfg, err
+ return AppConfig{}, err
}
err = yaml.UnmarshalStrict(contents, &cfg)
return cfg, err
@@ -77,9 +84,30 @@
"Namespace": namespaces[0],
}
}
- // TODO(giolekva): use ns suffix for app directory
return m.repoIO.InstallApp(
app,
- filepath.Join("/apps", app.Name+suffix),
+ filepath.Join(appDir, app.Name+suffix),
all)
}
+
+func (m *AppManager) Update(app App, instanceId string, config map[string]any) error {
+ // if err := m.repoIO.Fetch(); err != nil {
+ // return err
+ // }
+ globalConfig, err := m.repoIO.ReadConfig()
+ if err != nil {
+ return err
+ }
+ instanceDir := filepath.Join(appDir, instanceId)
+ instanceConfigPath := filepath.Join(instanceDir, configFileName)
+ appConfig, err := m.repoIO.ReadAppConfig(instanceConfigPath)
+ if err != nil {
+ return err
+ }
+ all := map[string]any{
+ "Global": globalConfig.Values,
+ "Values": config,
+ "Release": appConfig.Config["Release"],
+ }
+ return m.repoIO.InstallApp(app, instanceDir, all)
+}