cmd/ie/commands/to-bash.go (71 lines of code) (raw):

package commands import ( "encoding/json" "errors" "fmt" "strings" "github.com/Azure/InnovationEngine/internal/engine/common" "github.com/Azure/InnovationEngine/internal/engine/environments" "github.com/Azure/InnovationEngine/internal/logging" "github.com/spf13/cobra" ) type AzureScript struct { Script string `json:"script"` } var toBashCommand = &cobra.Command{ Use: "to-bash", Short: "Convert a markdown scenario into a bash script.", RunE: func(cmd *cobra.Command, args []string) error { markdownFile := args[0] if markdownFile == "" { logging.GlobalLogger.Errorf("Error: No markdown file specified.") return errors.New("error: No markdown file specified") } environment, _ := cmd.Flags().GetString("environment") environmentVariables, _ := cmd.Flags().GetStringArray("var") // Parse the environment variables cliEnvironmentVariables := make(map[string]string) for _, environmentVariable := range environmentVariables { keyValuePair := strings.SplitN(environmentVariable, "=", 2) if len(keyValuePair) != 2 { logging.GlobalLogger.Errorf( "Error: Invalid environment variable format: %s", environmentVariable, ) fmt.Printf("Error: Invalid environment variable format: %s", environmentVariable) cmd.Help() return fmt.Errorf( "error: Invalid environment variable format, %s", environmentVariable, ) } cliEnvironmentVariables[keyValuePair[0]] = keyValuePair[1] } // Parse the markdown file and create a scenario scenario, err := common.CreateScenarioFromMarkdown( markdownFile, []string{"bash", "azurecli", "azurecli-interactive", "terraform"}, cliEnvironmentVariables) if err != nil { logging.GlobalLogger.Errorf("Error creating scenario: %s", err) fmt.Printf("Error creating scenario: %s", err) return err } // If within cloudshell, we need to wrap the script in a json object to // communicate it to the portal. if environments.IsAzureEnvironment(environment) { script := AzureScript{Script: scenario.ToShellScript()} scriptJson, err := json.Marshal(script) if err != nil { logging.GlobalLogger.Errorf("Error converting to json: %s", err) fmt.Printf("Error converting to json: %s", err) return err } fmt.Printf("ie_us%sie_ue\n", scriptJson) } else { fmt.Printf("%s", scenario.ToShellScript()) } return nil }, } func init() { rootCommand.AddCommand(toBashCommand) toBashCommand.PersistentFlags(). StringArray("var", []string{}, "Sets an environment variable for the scenario. Format: --var <key>=<value>") }