package space_worker import ( "fmt" "os" "os/exec" "strings" ) func (app *SpaceWorker) Install(generateOnly bool, targetHost string, roles ...string) error { app.log.Debug(fmt.Sprintf("workDir: %s", app.workDir)) var host string if targetHost != "" { host = targetHost } else { var err error host, err = app.GetDefaultHost() if err != nil { return err } } ansibleArgs, err := app.setupInstallAnsibleArgs(app.AnsibleVerbose, host, roles) if err != nil { return err } command := exec.Command(app.AnsibleBin, ansibleArgs...) command.Dir = app.workDir command.Stdin = os.Stdin command.Stdout = os.Stdout command.Stderr = os.Stderr app.log.Info(fmt.Sprintf("Target Host: %s", host)) if generateOnly { fmt.Println(strings.Join(command.Args, " ")) } else { app.log.Debug(fmt.Sprintf("ansible command line: %s", command.Args)) _ = command.Run() } return nil } func (app *SpaceWorker) setupInstallAnsibleArgs(verbose uint8, targetHost string, roles []string) ([]string, error) { var ansibleArgs []string switch verbose { case 1: ansibleArgs = append(ansibleArgs, "-v") case 2: ansibleArgs = append(ansibleArgs, "-vv") case 3: ansibleArgs = append(ansibleArgs, "-vvv") } ansibleArgs = append(ansibleArgs, "-i", "hosts.yml") ansibleArgs = append(ansibleArgs, "-l", targetHost) if len(roles) > 0 { for _, role := range roles { ansibleArgs = append(ansibleArgs, "--extra-vars", fmt.Sprintf("dd_install_%s=true", role)) } } else { ansibleArgs = append(ansibleArgs, "--extra-vars", "dd_install=true") } return append(ansibleArgs, "playbook.yml"), nil }