implement chart per unit deployment

This commit is contained in:
Milos Pejanovic 2021-04-08 10:23:54 +02:00
parent 08da19defe
commit bf4a95507d
2 changed files with 57 additions and 12 deletions

View File

@ -53,13 +53,12 @@ func up(args []string, cwd, namespace string, build, push, diff bool, files []st
}
}
if err := sq.Generate(sq.GetUnits()); err != nil {
if err := sq.Generate(units); err != nil {
return err
}
if !diff {
return sq.Up(helmArgs)
} else if out, err := sq.Diff(helmArgs); err != nil {
return sq.Up(units, helmArgs)
return err
} else {
fmt.Println(out)

View File

@ -30,6 +30,7 @@ type Configuration struct {
Name string `yaml:"name,omitempty"`
Version string `yaml:"version,omitempty"`
Prefix string `yaml:"prefix,omitempty"`
Unite bool `yaml:"unite,omitempty"`
Global map[string]interface{} `yaml:"global,omitempty"`
Units map[string]Unit `yaml:"squadron,omitempty"`
}
@ -77,6 +78,19 @@ func (sq Squadron) Generate(units map[string]Unit) error {
if err := sq.cleanupOutput(sq.chartPath()); err != nil {
return err
}
if sq.c.Unite {
return sq.generateUmbrellaChart(units)
}
for uName, u := range units {
logrus.Infof("generating %q value overrides file in %q", uName, sq.chartPath())
if err := sq.generateValues(u.Values, sq.chartPath(), uName); err != nil {
return err
}
}
return nil
}
func (sq Squadron) generateUmbrellaChart(units map[string]Unit) error {
logrus.Infof("generating chart %q files in %q", sq.name, sq.chartPath())
if err := sq.generateChart(units, sq.chartPath(), sq.name, sq.c.Version); err != nil {
return err
@ -129,7 +143,8 @@ func (sq Squadron) computeDiff(formatter aurora.Aurora, a interface{}, b interfa
return strings.Join(diffs, "\n")
}
func (sq Squadron) Up(helmArgs []string) error {
func (sq Squadron) Up(units map[string]Unit, helmArgs []string) error {
if sq.c.Unite {
logrus.Infof("running helm upgrade for chart: %v", sq.chartPath())
_, err := util.NewHelmCommand().
Stdout(os.Stdout).
@ -138,6 +153,27 @@ func (sq Squadron) Up(helmArgs []string) error {
Args(helmArgs...).
Run()
return err
}
for uName, u := range units {
//todo use release prefix on install: squadron name or --name
logrus.Infof("running helm upgrade for %v", uName)
cmd := util.NewHelmCommand().
Stdout(os.Stdout).
Args("upgrade", uName, "--install").
Args("--namespace", sq.namespace).
Args("-f", path.Join(sq.chartPath(), uName+".yaml")).
Args(helmArgs...)
if strings.Contains(u.Chart.Repository, "file://") {
cmd.Args("/" + strings.TrimLeft(u.Chart.Repository, "file://"))
} else {
cmd.Args(u.Chart.Name, "--repo", u.Chart.Repository)
}
_, err := cmd.Run()
if err != nil {
return err
}
}
return nil
}
func (sq Squadron) Template(helmArgs []string) (string, error) {
@ -181,3 +217,13 @@ func (sq Squadron) generateChart(units map[string]Unit, chartPath, chartName, ve
}
return nil
}
func (sq Squadron) generateValues(values map[string]interface{}, vPath, vName string) error {
if sq.GetGlobal() != nil {
values["global"] = sq.GetGlobal()
}
if err := util.GenerateYaml(path.Join(vPath, vName+".yaml"), values); err != nil {
return err
}
return nil
}