// boot func boot(ccmd *cobra.Command, args []string) { // ensures the cli can run before trying to boot vm runnable(nil, args) // ensure a Vagrantfile is available before attempting to boot the VM initialize(nil, args) // get the status to know what needs to happen with the VM status := vagrant.Status() switch status { // vm is running - do nothing case "running": fmt.Printf(stylish.Bullet("Nanobox is already running")) break // vm is suspended - resume it case "saved": resume(nil, args) // vm is not created - create it case "not created": create(nil, args) // vm is in some unknown state - reload it default: fmt.Printf(stylish.Bullet("Nanobox is in an unknown state (%s). Reloading...", status)) reload(nil, args) } // server.Lock() // if the background flag is passed, set the mode to "background" if config.Background { config.VMfile.BackgroundIs(true) } }
// info runs 'vagrant status' func info(ccmd *cobra.Command, args []string) { // PreRun: runnable // determine status status := vagrant.Status() fmt.Printf(` Local Domain : %s App Name : %s Nanobox state : %s Nanobox Files : %s `, config.Nanofile.Domain, config.Nanofile.Name, status, config.AppDir) if status != "running" { fmt.Println("NOTE: To view 'services' information start nanobox with 'nanobox dev' or 'nanobox run'") return } // var services []server.Service if _, err := server.Get("/services", &services); err != nil { server.Fatal("[commands/info] failed", err.Error()) } // if len(services) >= 1 { fmt.Printf("////////// SERVICES //////////\n") // for _, service := range services { fmt.Printf("\n%s :\n", service.UID) if service.Name != "" { fmt.Printf(" name : %s\n", service.Name) } fmt.Printf(" host : %s\n", config.Nanofile.Domain) fmt.Printf(" ports : %v\n", service.Ports) // if service.Username != "" { fmt.Printf(" username : %s\n", service.Username) } // if service.Password != "" { fmt.Printf(" password : %s\n", service.Password) } // show any environment variables if len(service.EnvVars) >= 1 { fmt.Printf(" evars :\n") for k, v := range service.EnvVars { fmt.Printf(" %s : %s\n", k, v) } } } } }
// dev func dev(ccmd *cobra.Command, args []string) { // PreRun: boot // check to see if the devconfig option is one of our predetermined values. If // not indicate as much and return switch devconfig { case "mount", "copy", "none": break default: fmt.Printf("--dev-config option '%s' is not accepted. Please choose either 'mount', 'copy', or 'none'\n", devconfig) os.Exit(1) } // stream log output; this is done here because there might be output from hooks // that needs to be streamed to the client. This will also capture any output // that would come from a deploy (if one is run). mist, err := mistutil.Connect([]string{"log", "deploy"}, mistutil.PrintLogStream) if err != nil { config.Fatal("[commands/dev] mistutil.Connect() failed", err.Error()) } // don't rebuild if !nobuild { // if the vm has no been created or deployed, the rebuild flag, or the VM has // recently been reloaded do a deploy if vagrant.Status() == "not created" || !config.VMfile.HasDeployed() || rebuild || config.VMfile.HasReloaded() { fmt.Printf(stylish.Bullet("Deploying codebase...")) // remount the engine file at ~/.nanobox/apps/<app>/<engine> so any new scripts // will be used during the deploy if err := engineutil.RemountLocal(); err != nil { config.Debug("No engine mounted (not found locally).") } // run a deploy if err := server.Deploy(""); err != nil { server.Fatal("[commands/dev] server.Deploy() failed", err.Error()) } // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "deploy"}, mistutil.DeployUpdates) }() // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } // reset "reloaded" to false after a successful deploy so as NOT to deploy // on subsequent runnings of "nanobox dev" config.VMfile.ReloadedIs(false) } } // v := url.Values{} v.Add("dev_config", devconfig) // if err := server.Develop(v.Encode(), mist); err != nil { server.Error("[commands/dev] server.Develop failed", err.Error()) } // PostRun: halt }