cmd/update.go (101 lines of code) (raw):

package cmd import ( "encoding/json" "errors" "fmt" "os" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/Azure/draft/pkg/cmdhelpers" "github.com/Azure/draft/pkg/config" dryrunpkg "github.com/Azure/draft/pkg/dryrun" "github.com/Azure/draft/pkg/handlers" "github.com/Azure/draft/pkg/templatewriter" "github.com/Azure/draft/pkg/templatewriter/writers" ) type updateCmd struct { dest string provider string addon string flagVariables []string templateWriter templatewriter.TemplateWriter templateVariableRecorder config.TemplateVariableRecorder } var dryRunRecorder *dryrunpkg.DryRunRecorder func newUpdateCmd() *cobra.Command { uc := &updateCmd{} // updateCmd represents the update command var cmd = &cobra.Command{ Use: "update", Short: "Updates your application to be internet accessible", Long: `This command automatically updates your yaml files as necessary so that your application will be able to receive external requests.`, RunE: func(cmd *cobra.Command, args []string) error { if err := uc.run(); err != nil { return err } log.Info("Draft has successfully updated your yaml files so that your application will be able to receive external requests 😃") return nil }, } f := cmd.Flags() f.StringVarP(&uc.dest, "destination", "d", ".", "specify the path to the project directory") f.StringVarP(&uc.provider, "provider", "p", "azure", "cloud provider") f.StringVarP(&uc.addon, "addon", "a", "", "addon name") f.StringArrayVarP(&uc.flagVariables, "variable", "", []string{}, "pass template variables (e.g. --variable ingress-tls-cert-keyvault-uri=test.uri ingress-host=host)") uc.templateWriter = &writers.LocalFSWriter{} return cmd } func (uc *updateCmd) run() error { flagVariablesMap = flagVariablesToMap(uc.flagVariables) if dryRun { dryRunRecorder = dryrunpkg.NewDryRunRecorder() uc.templateVariableRecorder = dryRunRecorder uc.templateWriter = dryRunRecorder } updatedDest, err := cmdhelpers.GetAddonDestPath(uc.dest) if err != nil { log.Errorf("error getting addon destination path: %s", err.Error()) return err } ingressTemplate, err := handlers.GetTemplate("app-routing-ingress", "", updatedDest, uc.templateWriter) if err != nil { log.Errorf("error getting ingress template: %s", err.Error()) return err } if ingressTemplate == nil { return errors.New("DraftConfig is nil") } ingressTemplate.Config.VariableMapToDraftConfig(flagVariablesMap) err = cmdhelpers.PromptAddonValues(uc.dest, ingressTemplate.Config) if err != nil { return err } if dryRun { for _, variable := range ingressTemplate.Config.Variables { uc.templateVariableRecorder.Record(variable.Name, variable.Value) } } err = ingressTemplate.Generate() if err != nil { log.Errorf("error generating ingress template: %s", err.Error()) return err } if dryRun { dryRunText, err := json.MarshalIndent(dryRunRecorder.DryRunInfo, "", TWO_SPACES) if err != nil { return err } fmt.Println(string(dryRunText)) if dryRunFile != "" { log.Printf("writing dry run info to file %s", dryRunFile) err = os.WriteFile(dryRunFile, dryRunText, 0644) if err != nil { return err } } } return err } func init() { rootCmd.AddCommand(newUpdateCmd()) }