mirror of
https://github.com/foomo/squadron.git
synced 2025-10-16 12:35:42 +00:00
implement chart per unit deployment
This commit is contained in:
parent
08da19defe
commit
bf4a95507d
@ -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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !diff {
|
if !diff {
|
||||||
return sq.Up(helmArgs)
|
return sq.Up(units, helmArgs)
|
||||||
} else if out, err := sq.Diff(helmArgs); err != nil {
|
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(out)
|
fmt.Println(out)
|
||||||
|
|||||||
64
squadron.go
64
squadron.go
@ -30,6 +30,7 @@ type Configuration struct {
|
|||||||
Name string `yaml:"name,omitempty"`
|
Name string `yaml:"name,omitempty"`
|
||||||
Version string `yaml:"version,omitempty"`
|
Version string `yaml:"version,omitempty"`
|
||||||
Prefix string `yaml:"prefix,omitempty"`
|
Prefix string `yaml:"prefix,omitempty"`
|
||||||
|
Unite bool `yaml:"unite,omitempty"`
|
||||||
Global map[string]interface{} `yaml:"global,omitempty"`
|
Global map[string]interface{} `yaml:"global,omitempty"`
|
||||||
Units map[string]Unit `yaml:"squadron,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 {
|
if err := sq.cleanupOutput(sq.chartPath()); err != nil {
|
||||||
return err
|
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())
|
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 {
|
if err := sq.generateChart(units, sq.chartPath(), sq.name, sq.c.Version); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -129,15 +143,37 @@ func (sq Squadron) computeDiff(formatter aurora.Aurora, a interface{}, b interfa
|
|||||||
return strings.Join(diffs, "\n")
|
return strings.Join(diffs, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sq Squadron) Up(helmArgs []string) error {
|
func (sq Squadron) Up(units map[string]Unit, helmArgs []string) error {
|
||||||
logrus.Infof("running helm upgrade for chart: %v", sq.chartPath())
|
if sq.c.Unite {
|
||||||
_, err := util.NewHelmCommand().
|
logrus.Infof("running helm upgrade for chart: %v", sq.chartPath())
|
||||||
Stdout(os.Stdout).
|
_, err := util.NewHelmCommand().
|
||||||
Args("upgrade", sq.name, sq.chartPath(), "--install").
|
Stdout(os.Stdout).
|
||||||
Args("--namespace", sq.namespace).
|
Args("upgrade", sq.name, sq.chartPath(), "--install").
|
||||||
Args(helmArgs...).
|
Args("--namespace", sq.namespace).
|
||||||
Run()
|
Args(helmArgs...).
|
||||||
return err
|
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) {
|
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
|
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
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user