blob: d2feccc29f97b439954b6f8b1b2188b03d3b0d44 [file] [log] [blame]
package installer
import (
"fmt"
"io/ioutil"
"sigs.k8s.io/yaml"
)
const appDirName = "apps"
const configFileName = "config.yaml"
const kustomizationFileName = "kustomization.yaml"
type AppManager struct {
repoIO RepoIO
nsCreator NamespaceCreator
}
func NewAppManager(repoIO RepoIO, nsCreator NamespaceCreator) (*AppManager, error) {
return &AppManager{
repoIO,
nsCreator,
}, nil
}
func (m *AppManager) Config() (Config, error) {
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))
if err != nil {
return nil, err
}
defer configF.Close()
var cfg map[string]any
contents, err := ioutil.ReadAll(configF)
if err != nil {
return cfg, err
}
err = yaml.UnmarshalStrict(contents, &cfg)
return cfg, err
}
func (m *AppManager) Install(app App, ns NamespaceGenerator, config map[string]any) error {
// if err := m.repoIO.Fetch(); err != nil {
// return err
// }
namespaces := make([]string, len(app.Namespaces))
for i, n := range app.Namespaces {
var err error
namespaces[i], err = ns.Generate(n)
if err != nil {
return err
}
}
for _, n := range namespaces {
if err := m.nsCreator.Create(n); err != nil {
return err
}
}
globalConfig, err := m.repoIO.ReadConfig()
if err != nil {
return err
}
all := map[string]any{
"Global": globalConfig.Values,
"Values": config,
}
if len(namespaces) > 0 {
all["Release"] = map[string]any{
"Namespace": namespaces[0],
}
}
return m.repoIO.InstallApp(app, "apps", all)
}