45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"fmt"
|
|
"git.yuntuo.hk/k2safe/go-omni/cmd/go-omni/apigen"
|
|
"io"
|
|
)
|
|
|
|
func runUpgrade(args []string) error {
|
|
flags := flag.NewFlagSet("upgrade", flag.ContinueOnError)
|
|
flags.SetOutput(io.Discard)
|
|
dir := flags.String("dir", ".", "service directory")
|
|
apply := flags.Bool("apply", false, "apply only recognized baseline changes")
|
|
preview := flags.String("preview", "", "write proposed infrastructure into an empty directory")
|
|
dry := flags.Bool("dry-run", false, "show the upgrade plan")
|
|
if err := flags.Parse(args); err != nil {
|
|
return err
|
|
}
|
|
if flags.NArg() != 0 {
|
|
return errors.New("unexpected upgrade argument")
|
|
}
|
|
if *apply && (*preview != "" || *dry) {
|
|
return errors.New("--apply cannot be combined with preview/dry-run")
|
|
}
|
|
var plan apigen.UpgradePlan
|
|
var err error
|
|
if *apply {
|
|
plan, err = apigen.ApplyUpgrade(*dir)
|
|
} else if *preview != "" {
|
|
plan, err = apigen.PreviewUpgrade(*dir, *preview)
|
|
} else {
|
|
plan, err = apigen.PlanUpgrade(*dir)
|
|
}
|
|
for _, c := range plan.Changes {
|
|
kind := "safe"
|
|
if c.Manual {
|
|
kind = "review"
|
|
}
|
|
fmt.Printf("%-6s %-6s %s\n", kind, c.Action, c.Path)
|
|
}
|
|
return err
|
|
}
|