Пример #1
0
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(&params); 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(&params)
	if err != nil {
		return nil, err
	}

	if err := v.Create(vagrantFile); err != nil {
		return nil, err
	}

	return params, nil
}