// Create requests a server to be provisioned to the user in the current tenant. func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult { var res CreateResult reqBody, err := opts.ToServerCreateMap() if err != nil { res.Err = err return res } // If ImageRef isn't provided, use ImageName to ascertain the image ID. if reqBody["server"].(map[string]interface{})["imageRef"].(string) == "" { imageName := reqBody["server"].(map[string]interface{})["imageName"].(string) if imageName == "" { res.Err = &ErrNeitherImageIDNorImageNameProvided{ &gophercloud.InvalidInputError{ BaseError: gophercloud.BaseError{ Function: "servers.Create", }, Argument: "ImageRef/ImageName", }, } return res } imageID, err := images.IDFromName(client, imageName) if err != nil { res.Err = err return res } reqBody["server"].(map[string]interface{})["imageRef"] = imageID } delete(reqBody["server"].(map[string]interface{}), "imageName") // If FlavorRef isn't provided, use FlavorName to ascertain the flavor ID. if reqBody["server"].(map[string]interface{})["flavorRef"].(string) == "" { flavorName := reqBody["server"].(map[string]interface{})["flavorName"].(string) if flavorName == "" { res.Err = &ErrNeitherFlavorIDNorFlavorNameProvided{ &gophercloud.InvalidInputError{ BaseError: gophercloud.BaseError{ Function: "servers.Create", }, Argument: "FlavorRef/FlavorName", }, } return res } flavorID, err := flavors.IDFromName(client, flavorName) if err != nil { res.Err = err return res } reqBody["server"].(map[string]interface{})["flavorRef"] = flavorID } delete(reqBody["server"].(map[string]interface{}), "flavorName") _, res.Err = client.Post(listURL(client), reqBody, &res.Body, &gophercloud.RequestOpts{ ErrorContext: &ServerError{}, }) return res }
// Create requests a server to be provisioned to the user in the current tenant. func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult { var res CreateResult reqBody, err := opts.ToServerCreateMap() if err != nil { res.Err = err return res } // If ImageRef isn't provided, use ImageName to ascertain the image ID. if reqBody["server"].(map[string]interface{})["imageRef"].(string) == "" { imageName := reqBody["server"].(map[string]interface{})["imageName"].(string) if imageName == "" { res.Err = errors.New("One and only one of ImageRef and ImageName must be provided.") return res } imageID, err := images.IDFromName(client, imageName) if err != nil { res.Err = err return res } reqBody["server"].(map[string]interface{})["imageRef"] = imageID } delete(reqBody["server"].(map[string]interface{}), "imageName") // If FlavorRef isn't provided, use FlavorName to ascertain the flavor ID. if reqBody["server"].(map[string]interface{})["flavorRef"].(string) == "" { flavorName := reqBody["server"].(map[string]interface{})["flavorName"].(string) if flavorName == "" { res.Err = errors.New("One and only one of FlavorRef and FlavorName must be provided.") return res } flavorID, err := flavors.IDFromName(client, flavorName) if err != nil { res.Err = err return res } reqBody["server"].(map[string]interface{})["flavorRef"] = flavorID } delete(reqBody["server"].(map[string]interface{}), "flavorName") _, res.Err = client.Post(listURL(client), reqBody, &res.Body, nil) return res }