// 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 }
// 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 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 }
// 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 }
// 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 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 }
// 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 }
// 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 }
// 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 }
/* 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 }
// Get will retrieve the details for a particular user. func Get(client *gophercloud.ServiceClient, instanceID, userName string) GetResult { var res GetResult _, res.Err = client.Request("GET", userURL(client, instanceID, userName), gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// Get will retrieve information for a specified hardware flavor. func Get(client *gophercloud.ServiceClient, id string) GetResult { var gr GetResult _, gr.Err = client.Request("GET", getURL(client, id), gophercloud.RequestOpts{ JSONResponse: &gr.Body, OkCodes: []int{200}, }) return gr }
// DetachReplica will detach a specified replica instance from its source // instance, effectively allowing it to operate independently. Detaching a // replica will restart the MySQL service on the instance. func DetachReplica(client *gophercloud.ServiceClient, replicaID string) DetachResult { var res DetachResult _, res.Err = client.Request("PATCH", resourceURL(client, replicaID), gophercloud.RequestOpts{ JSONBody: map[string]interface{}{"instance": map[string]string{"replica_of": "", "slave_of": ""}}, OkCodes: []int{202}, }) return res }
// GetDefaultConfig lists the default configuration settings from the template // that was applied to the specified instance. In a sense, this is the vanilla // configuration setting applied to an instance. Further configuration can be // applied by associating an instance with a configuration group. func GetDefaultConfig(client *gophercloud.ServiceClient, id string) ConfigResult { var res ConfigResult _, res.Err = client.Request("GET", configURL(client, id), gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// GetVersion will retrieve the details of a specified datastore version. func GetVersion(client *gophercloud.ServiceClient, datastoreID, versionID string) GetVersionResult { var res GetVersionResult _, res.Err = client.Request("GET", versionURL(client, datastoreID, versionID), gophercloud.RequestOpts{ OkCodes: []int{200}, JSONResponse: &res.Body, }) 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 }
// EnableRootUser enables the login from any host for the root user and // provides the user with a generated root password. func EnableRootUser(client *gophercloud.ServiceClient, id string) UserRootResult { var res UserRootResult _, res.Err = client.Request("POST", userRootURL(client, id), gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// IsRootEnabled checks an instance to see if root access is enabled. It returns // True if root user is enabled for the specified database instance or False // otherwise. func IsRootEnabled(client *gophercloud.ServiceClient, id string) (bool, error) { var res gophercloud.Result _, err := client.Request("GET", userRootURL(client, id), gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res.Body.(map[string]interface{})["rootEnabled"] == true, err }
// Get retrieves the status and information for a specified database instance. func Get(client *gophercloud.ServiceClient, id string) GetResult { var res GetResult _, res.Err = client.Request("GET", resourceURL(client, id), gophercloud.RequestOpts{ JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// Validate determines if a specified token is valid or not. func Validate(c *gophercloud.ServiceClient, token string) (bool, error) { response, err := c.Request("HEAD", tokenURL(c), gophercloud.RequestOpts{ MoreHeaders: subjectTokenHeaders(c, token), OkCodes: []int{204, 404}, }) if err != nil { return false, err } return response.StatusCode == 204, nil }
// Create is a function that creates a new object or replaces an existing object. If the returned response's ETag // header fails to match the local checksum, the failed request will automatically be retried up to a maximum of 3 times. func Create(c *gophercloud.ServiceClient, containerName, objectName string, content io.ReadSeeker, opts CreateOptsBuilder) CreateResult { var res CreateResult url := createURL(c, containerName, objectName) h := make(map[string]string) if opts != nil { headers, query, err := opts.ToObjectCreateParams() if err != nil { res.Err = err return res } for k, v := range headers { h[k] = v } url += query } hash := md5.New() bufioReader := bufio.NewReader(io.TeeReader(content, hash)) io.Copy(ioutil.Discard, bufioReader) localChecksum := hash.Sum(nil) h["ETag"] = fmt.Sprintf("%x", localChecksum) _, err := content.Seek(0, 0) if err != nil { res.Err = err return res } ropts := gophercloud.RequestOpts{ RawBody: content, MoreHeaders: h, } resp, err := c.Request("PUT", url, ropts) if err != nil { res.Err = err return res } if resp != nil { res.Header = resp.Header if resp.Header.Get("ETag") == fmt.Sprintf("%x", localChecksum) { res.Err = err return res } res.Err = fmt.Errorf("Local checksum does not match API ETag header") } return res }
// Get is a function that retrieves the metadata of a container. To extract just // the custom metadata, pass the GetResult response to the ExtractMetadata // function. func Get(c *gophercloud.ServiceClient, containerName string) GetResult { var res GetResult resp, err := c.Request("HEAD", getURL(c, containerName), gophercloud.RequestOpts{ OkCodes: []int{200, 204}, ErrorContext: &ContainerError{name: containerName}, }) if resp != nil { res.Header = resp.Header } res.Err = err return res }
// AssociateWithConfigGroup associates a specified instance to a specified // configuration group. If any of the parameters within a configuration group // require a restart, then the instance will transition into a restart. func AssociateWithConfigGroup(client *gophercloud.ServiceClient, instanceID, configGroupID string) UpdateResult { reqBody := map[string]string{ "configuration": configGroupID, } var res UpdateResult _, res.Err = client.Request("PUT", resourceURL(client, instanceID), gophercloud.RequestOpts{ JSONBody: map[string]map[string]string{"instance": reqBody}, OkCodes: []int{202}, }) return res }
/* GrantAccess for the specified user to one or more databases on a specified instance. For example, to add a user to multiple databases: opts := db.BatchCreateOpts{ db.CreateOpts{Name: "database_1"}, db.CreateOpts{Name: "database_3"}, db.CreateOpts{Name: "database_19"}, } GrantAccess(client, "instance_id", "user_name", opts) */ func GrantAccess(client *gophercloud.ServiceClient, instanceID, userName string, opts db.CreateOptsBuilder) GrantAccessResult { var res GrantAccessResult reqBody, err := opts.ToDBCreateMap() if err != nil { res.Err = err return res } _, res.Err = client.Request("PUT", dbsURL(client, instanceID, userName), gophercloud.RequestOpts{ JSONBody: &reqBody, OkCodes: []int{202}, }) return res }
/* ChangePassword changes the password for one or more users. For example, to change the respective passwords for two users: opts := os.BatchCreateOpts{ os.CreateOpts{Name: "db_user_1", Password: "******"}, os.CreateOpts{Name: "db_user_2", Password: "******"}, } ChangePassword(client, "instance_id", opts) */ func ChangePassword(client *gophercloud.ServiceClient, instanceID string, opts os.CreateOptsBuilder) UpdatePasswordsResult { var res UpdatePasswordsResult reqBody, err := opts.ToUserCreateMap() if err != nil { res.Err = err return res } _, res.Err = client.Request("PUT", baseURL(client, instanceID), gophercloud.RequestOpts{ JSONBody: &reqBody, OkCodes: []int{202}, }) return res }
// Create asynchronously provisions a new database instance. It requires the // user to specify a flavor and a volume size. The API service then provisions // the instance with the requested flavor and sets up a volume of the specified // size, which is the storage for the database instance. // // Although this call only allows the creation of 1 instance per request, you // can create an instance with multiple databases and users. The default // binding for a MySQL instance is port 3306. func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult { var res CreateResult reqBody, err := opts.ToInstanceCreateMap() if err != nil { res.Err = err return res } _, res.Err = client.Request("POST", baseURL(client), gophercloud.RequestOpts{ JSONBody: &reqBody, JSONResponse: &res.Body, OkCodes: []int{200}, }) return res }
// Update will modify the attributes of a specified user. Attributes that can // be updated are: user name, password, and host. func Update(client *gophercloud.ServiceClient, instanceID, userName string, opts UpdateOpts) UpdateResult { var res UpdateResult reqBody, err := opts.ToMap() if err != nil { res.Err = err return res } reqBody = map[string]interface{}{"user": reqBody} _, res.Err = client.Request("PUT", userURL(client, instanceID, userName), gophercloud.RequestOpts{ JSONBody: &reqBody, OkCodes: []int{202}, }) return res }
// Update accepts a UpdateOpts struct and updates an existing snapshot using the // values provided. func Update(c *gophercloud.ServiceClient, snapshotID string, opts UpdateOptsBuilder) UpdateResult { var res UpdateResult reqBody, err := opts.ToSnapshotUpdateMap() if err != nil { res.Err = err return res } // Send request to API _, res.Err = c.Request("PUT", updateURL(c, snapshotID), gophercloud.RequestOpts{ JSONBody: &reqBody, JSONResponse: &res.Body, OkCodes: []int{200, 201}, }) return res }