func (h *Handlers) create(r *kite.Request, v *vagrantutil.Vagrant) (interface{}, error) { if r.Args == nil { return nil, errors.New("missing arguments") } var params VagrantCreateOptions if err := r.Args.One().Unmarshal(¶ms); err != nil { return nil, err } params.FilePath = h.absolute(params.FilePath) if params.Box == "" { params.Box = "ubuntu/trusty64" } if params.Hostname == "" { params.Hostname = r.LocalKite.Config.Username } if params.Memory == 0 { params.Memory = 1024 } if params.Cpus == 0 { params.Cpus = 1 } if params.TLSProxyHostname == "" { params.TLSProxyHostname = pem.Hostname } switch { case !params.Dirty: // Ensure vagrant working dir has no machine provisioned. err := vagrantutil.Wait(v.Destroy()) if err != nil { h.log().Error("unable to destroy before create: %s", err) break } status, err := v.Status() if err != nil { h.log().Error("unable to check status: %s", err) break } if status != vagrantutil.NotCreated { h.log().Error("dirty Vagrant directory: want status to be %v, was %v", vagrantutil.NotCreated, status) } } h.boxAdd(v, params.Box, params.FilePath) vagrantFile, err := createTemplate(¶ms) if err != nil { return nil, err } if err := v.Create(vagrantFile); err != nil { return nil, err } return params, nil }