// Reboot requests that a given server reboot. // Two methods exist for rebooting a server: // // HardReboot (aka PowerCycle) restarts the server instance by physically cutting power to the machine, or if a VM, // terminating it at the hypervisor level. // It's done. Caput. Full stop. // Then, after a brief while, power is restored or the VM instance restarted. // // SoftReboot (aka OSReboot) simply tells the OS to restart under its own procedures. // E.g., in Linux, asking it to enter runlevel 6, or executing "sudo shutdown -r now", or by asking Windows to restart the machine. func Reboot(client *gophercloud.ServiceClient, id string, how RebootMethod) ActionResult { var res ActionResult if (how != SoftReboot) && (how != HardReboot) { res.Err = &ErrInvalidHowParameterProvided{ &gophercloud.InvalidInputError{ BaseError: gophercloud.BaseError{ Function: "servers.Reboot", }, Argument: "how", Value: how, }, } return res } reqBody := struct { C map[string]string `json:"reboot"` }{ map[string]string{"type": string(how)}, } _, res.Err = client.Post(actionURL(client, id), reqBody, nil, &gophercloud.RequestOpts{ ErrorContext: &ServerError{id: id}, }) return res }
// Delete requests that a server previously provisioned be removed from your account. func Delete(client *gophercloud.ServiceClient, id string) DeleteResult { var res DeleteResult _, res.Err = client.Delete(deleteURL(client, id), &gophercloud.RequestOpts{ ErrorContext: &ServerError{id: id}, }) return res }
// Rescue instructs the provider to place the server into RESCUE mode. func Rescue(client *gophercloud.ServiceClient, id string, opts RescueOptsBuilder) RescueResult { var result RescueResult if id == "" { result.Err = &ErrNoIDProvided{ &gophercloud.InvalidInputError{ BaseError: gophercloud.BaseError{ Function: "servers.Rescue", }, Argument: "id", }, } return result } reqBody, err := opts.ToServerRescueMap() if err != nil { result.Err = err return result } _, result.Err = client.Post(actionURL(client, id), reqBody, &result.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, ErrorContext: &ServerError{id: id}, }) return result }
// Get retreives data for the given stack template. func Get(c *gophercloud.ServiceClient, stackName, stackID string) GetResult { var res GetResult _, res.Err = c.Request("GET", getURL(c, stackName, stackID), gophercloud.RequestOpts{ JSONResponse: &res.Body, }) return res }
// Copy is a function that copies one object to another. func Copy(c *gophercloud.ServiceClient, containerName, objectName string, opts CopyOptsBuilder) CopyResult { var res CopyResult h := c.AuthenticatedHeaders() headers, err := opts.ToObjectCopyMap() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } url := copyURL(c, containerName, objectName) resp, err := c.Request("COPY", url, gophercloud.RequestOpts{ MoreHeaders: h, OkCodes: []int{201}, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// Update is a function that creates, updates, or deletes an object's metadata. func Update(c *gophercloud.ServiceClient, containerName, objectName string, opts UpdateOptsBuilder) UpdateResult { var res UpdateResult h := c.AuthenticatedHeaders() if opts != nil { headers, err := opts.ToObjectUpdateMap() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } } url := updateURL(c, containerName, objectName) resp, err := c.Request("POST", url, gophercloud.RequestOpts{ MoreHeaders: h, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// Revoke immediately makes specified token invalid. func Revoke(c *gophercloud.ServiceClient, token string) RevokeResult { var res RevokeResult _, res.Err = c.Delete(tokenURL(c), &gophercloud.RequestOpts{ MoreHeaders: subjectTokenHeaders(c, token), }) 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 = &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 }
// DeleteMetadatum will delete the key-value pair with the given key for the given server ID. func DeleteMetadatum(client *gophercloud.ServiceClient, id, key string) DeleteMetadatumResult { var res DeleteMetadatumResult _, res.Err = client.Delete(metadatumURL(client, id, key), &gophercloud.RequestOpts{ JSONResponse: &res.Body, }) return res }
// Metadatum requests the key-value pair with the given key for the given server ID. func Metadatum(client *gophercloud.ServiceClient, id, key string) GetMetadatumResult { var res GetMetadatumResult _, res.Err = client.Request("GET", metadatumURL(client, id, key), gophercloud.RequestOpts{ JSONResponse: &res.Body, }) return res }
// Get retreives data for the given stack resource. func Get(c *gophercloud.ServiceClient, stackName, stackID, resourceName, eventID string) GetResult { var res GetResult _, res.Err = c.Get(getURL(c, stackName, stackID, resourceName, eventID), &res.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, }) return res }
// Update is a function that creates, updates, or deletes an account's metadata. // To extract the headers returned, call the Extract method on the UpdateResult. func Update(c *gophercloud.ServiceClient, opts UpdateOptsBuilder) UpdateResult { var res UpdateResult h := make(map[string]string) if opts != nil { headers, err := opts.ToAccountUpdateMap() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } } resp, err := c.Request("POST", updateURL(c), gophercloud.RequestOpts{ MoreHeaders: h, OkCodes: []int{201, 202, 204}, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// Get is a function that retrieves an account's metadata. To extract just the // custom metadata, call the ExtractMetadata method on the GetResult. To extract // all the headers that are returned (including the metadata), call the // ExtractHeader method on the GetResult. func Get(c *gophercloud.ServiceClient, opts GetOptsBuilder) GetResult { var res GetResult h := c.AuthenticatedHeaders() if opts != nil { headers, err := opts.ToAccountGetMap() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } } resp, err := c.Request("HEAD", getURL(c), gophercloud.RequestOpts{ MoreHeaders: h, OkCodes: []int{204}, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// Create is an operation which provisions a new security group with default // security group rules for the IPv4 and IPv6 ether types. func Create(c *gophercloud.ServiceClient, opts CreateOpts) CreateResult { var res CreateResult // Validate required opts if opts.Name == "" { res.Err = errNameRequired return res } type secgroup struct { Name string `json:"name"` Description string `json:"description,omitempty"` } type request struct { SecGroup secgroup `json:"security_group"` } reqBody := request{SecGroup: secgroup{ Name: opts.Name, Description: opts.Description, }} _, res.Err = c.Post(rootURL(c), reqBody, &res.Body, nil) return res }
// Download is a function that retrieves the content and metadata for an object. // To extract just the content, pass the DownloadResult response to the // ExtractContent function. func Download(c *gophercloud.ServiceClient, containerName, objectName string, opts DownloadOptsBuilder) DownloadResult { var res DownloadResult url := downloadURL(c, containerName, objectName) h := c.AuthenticatedHeaders() if opts != nil { headers, query, err := opts.ToObjectDownloadParams() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } url += query } resp, err := c.Request("GET", url, gophercloud.RequestOpts{ MoreHeaders: h, OkCodes: []int{200, 304}, }) if resp != nil { res.Header = resp.Header res.Body = resp.Body } res.Err = err return res }
// Create is a function that creates a new container. func Create(c *gophercloud.ServiceClient, containerName string, opts CreateOptsBuilder) CreateResult { var res CreateResult h := c.AuthenticatedHeaders() if opts != nil { headers, err := opts.ToContainerCreateMap() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } } resp, err := c.Request("PUT", createURL(c, containerName), gophercloud.RequestOpts{ MoreHeaders: h, OkCodes: []int{201, 202, 204}, ErrorContext: &ContainerError{}, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// Delete is a function that deletes a container. func Delete(c *gophercloud.ServiceClient, containerName string) DeleteResult { var res DeleteResult _, res.Err = c.Delete(deleteURL(c, containerName), &gophercloud.RequestOpts{ ErrorContext: &ContainerError{name: containerName}, }) return res }
// Find retrieves stack events for the given stack name. func Find(c *gophercloud.ServiceClient, stackName string) FindResult { var res FindResult _, res.Err = c.Request("GET", findURL(c, stackName), gophercloud.RequestOpts{ JSONResponse: &res.Body, }) return res }
// Abandon deletes the stack with the provided stackName and stackID, but leaves its // resources intact, and returns data describing the stack and its resources. func Abandon(c *gophercloud.ServiceClient, stackName, stackID string) AbandonResult { var res AbandonResult _, res.Err = c.Delete(abandonURL(c, stackName, stackID), &gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// RevertResize cancels a previous resize operation on a server. // See Resize() for more details. func RevertResize(client *gophercloud.ServiceClient, id string) ActionResult { var res ActionResult reqBody := map[string]interface{}{"revertResize": nil} _, res.Err = client.Post(actionURL(client, id), reqBody, nil, &gophercloud.RequestOpts{ ErrorContext: &ServerError{id: id}, }) return res }
// Get requests details on a single server, by ID. func Get(client *gophercloud.ServiceClient, id string) GetResult { var result GetResult _, result.Err = client.Get(getURL(client, id), &result.Body, &gophercloud.RequestOpts{ OkCodes: []int{200, 203}, ErrorContext: &ServerError{id: id}, }) return result }
// Delete will permanently delete a user from a specified database instance. func Delete(client *gophercloud.ServiceClient, instanceID, userName string) DeleteResult { var res DeleteResult _, res.Err = client.Request("DELETE", userURL(client, instanceID, userName), gophercloud.RequestOpts{ OkCodes: []int{202}, }) return res }
// Schema retreives the schema for the given resource type. func Schema(c *gophercloud.ServiceClient, resourceType string) SchemaResult { var res SchemaResult // Send request to API _, res.Err = c.Get(schemaURL(c, resourceType), &res.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, }) return res }
// Template retreives the template representation for the given resource type. func Template(c *gophercloud.ServiceClient, resourceType string) TemplateResult { var res TemplateResult // Send request to API _, res.Err = c.Get(templateURL(c, resourceType), &res.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, }) return res }
// Metadata retreives the metadata for the given stack resource. func Metadata(c *gophercloud.ServiceClient, stackName, stackID, resourceName string) MetadataResult { var res MetadataResult // Send request to API _, res.Err = c.Get(metadataURL(c, stackName, stackID, resourceName), &res.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, }) return res }
/* RevokeAccess will revoke access for the specified user to one or more databases on a specified instance. For example: RevokeAccess(client, "instance_id", "user_name", "db_name") */ func RevokeAccess(client *gophercloud.ServiceClient, instanceID, userName, dbName string) RevokeAccessResult { var res RevokeAccessResult _, res.Err = client.Request("DELETE", dbURL(client, instanceID, userName, dbName), gophercloud.RequestOpts{ OkCodes: []int{202}, }) return res }
// Delete permanently destroys the database instance. func Delete(client *gophercloud.ServiceClient, id string) DeleteResult { var res DeleteResult _, res.Err = client.Request("DELETE", resourceURL(client, id), gophercloud.RequestOpts{ OkCodes: []int{202}, }) return res }
// Update requests that various attributes of the indicated server be changed. func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) UpdateResult { var result UpdateResult reqBody := opts.ToServerUpdateMap() _, result.Err = client.Put(updateURL(client, id), reqBody, &result.Body, &gophercloud.RequestOpts{ OkCodes: []int{200}, ErrorContext: &ServerError{id: id}, }) return result }
// ConfirmResize confirms a previous resize operation on a server. // See Resize() for more details. func ConfirmResize(client *gophercloud.ServiceClient, id string) ActionResult { var res ActionResult reqBody := map[string]interface{}{"confirmResize": nil} _, res.Err = client.Post(actionURL(client, id), reqBody, nil, &gophercloud.RequestOpts{ OkCodes: []int{201, 202, 204}, ErrorContext: &ServerError{id: id}, }) return res }
// Restart will restart only the MySQL Instance. Restarting MySQL will // erase any dynamic configuration settings that you have made within MySQL. // The MySQL service will be unavailable until the instance restarts. func Restart(client *gophercloud.ServiceClient, id string) ActionResult { var res ActionResult _, res.Err = client.Request("POST", actionURL(client, id), gophercloud.RequestOpts{ JSONBody: map[string]interface{}{"restart": struct{}{}}, OkCodes: []int{202}, }) return res }