| package configurations |
| |
| import ( |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git" |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/db/v1/instances" |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination" |
| ) |
| |
| // List will list all of the available configurations. |
| func List(client *gophercloud.ServiceClient) pagination.Pager { |
| return pagination.NewPager(client, baseURL(client), func(r pagination.PageResult) pagination.Page { |
| return ConfigPage{pagination.SinglePageBase(r)} |
| }) |
| } |
| |
| // CreateOptsBuilder is a top-level interface which renders a JSON map. |
| type CreateOptsBuilder interface { |
| ToConfigCreateMap() (map[string]interface{}, error) |
| } |
| |
| // DatastoreOpts is the primary options struct for creating and modifying |
| // how configuration resources are associated with datastores. |
| type DatastoreOpts struct { |
| // The type of datastore. Defaults to "MySQL". |
| Type string `json:"type,omitempty"` |
| // The specific version of a datastore. Defaults to "5.6". |
| Version string `json:"version,omitempty"` |
| } |
| |
| // CreateOpts is the struct responsible for configuring new configurations. |
| type CreateOpts struct { |
| // The configuration group name |
| Name string `json:"name" required:"true"` |
| // A map of user-defined configuration settings that will define |
| // how each associated datastore works. Each key/value pair is specific to a |
| // datastore type. |
| Values map[string]interface{} `json:"values" required:"true"` |
| // Associates the configuration group with a particular datastore. |
| Datastore *DatastoreOpts `json:"datastore,omitempty"` |
| // A human-readable explanation for the group. |
| Description string `json:"description,omitempty"` |
| } |
| |
| // ToConfigCreateMap casts a CreateOpts struct into a JSON map. |
| func (opts CreateOpts) ToConfigCreateMap() (map[string]interface{}, error) { |
| return gophercloud.BuildRequestBody(opts, "configuration") |
| } |
| |
| // Create will create a new configuration group. |
| func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { |
| b, err := opts.ToConfigCreateMap() |
| if err != nil { |
| r.Err = err |
| return |
| } |
| _, r.Err = client.Post(baseURL(client), &b, &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}}) |
| return |
| } |
| |
| // Get will retrieve the details for a specified configuration group. |
| func Get(client *gophercloud.ServiceClient, configID string) (r GetResult) { |
| _, r.Err = client.Get(resourceURL(client, configID), &r.Body, nil) |
| return |
| } |
| |
| // UpdateOptsBuilder is the top-level interface for casting update options into |
| // JSON maps. |
| type UpdateOptsBuilder interface { |
| ToConfigUpdateMap() (map[string]interface{}, error) |
| } |
| |
| // UpdateOpts is the struct responsible for modifying existing configurations. |
| type UpdateOpts struct { |
| // The configuration group name |
| Name string `json:"name,omitempty"` |
| // A map of user-defined configuration settings that will define |
| // how each associated datastore works. Each key/value pair is specific to a |
| // datastore type. |
| Values map[string]interface{} `json:"values,omitempty"` |
| // Associates the configuration group with a particular datastore. |
| Datastore *DatastoreOpts `json:"datastore,omitempty"` |
| // A human-readable explanation for the group. |
| Description string `json:"description,omitempty"` |
| } |
| |
| // ToConfigUpdateMap will cast an UpdateOpts struct into a JSON map. |
| func (opts UpdateOpts) ToConfigUpdateMap() (map[string]interface{}, error) { |
| return gophercloud.BuildRequestBody(opts, "configuration") |
| } |
| |
| // Update will modify an existing configuration group by performing a merge |
| // between new and existing values. If the key already exists, the new value |
| // will overwrite. All other keys will remain unaffected. |
| func Update(client *gophercloud.ServiceClient, configID string, opts UpdateOptsBuilder) (r UpdateResult) { |
| b, err := opts.ToConfigUpdateMap() |
| if err != nil { |
| r.Err = err |
| return |
| } |
| _, r.Err = client.Patch(resourceURL(client, configID), &b, nil, nil) |
| return |
| } |
| |
| // Replace will modify an existing configuration group by overwriting the |
| // entire parameter group with the new values provided. Any existing keys not |
| // included in UpdateOptsBuilder will be deleted. |
| func Replace(client *gophercloud.ServiceClient, configID string, opts UpdateOptsBuilder) (r ReplaceResult) { |
| b, err := opts.ToConfigUpdateMap() |
| if err != nil { |
| r.Err = err |
| return |
| } |
| _, r.Err = client.Put(resourceURL(client, configID), &b, nil, nil) |
| return |
| } |
| |
| // Delete will permanently delete a configuration group. Please note that |
| // config groups cannot be deleted whilst still attached to running instances - |
| // you must detach and then delete them. |
| func Delete(client *gophercloud.ServiceClient, configID string) (r DeleteResult) { |
| _, r.Err = client.Delete(resourceURL(client, configID), nil) |
| return |
| } |
| |
| // ListInstances will list all the instances associated with a particular |
| // configuration group. |
| func ListInstances(client *gophercloud.ServiceClient, configID string) pagination.Pager { |
| return pagination.NewPager(client, instancesURL(client, configID), func(r pagination.PageResult) pagination.Page { |
| return instances.InstancePage{pagination.LinkedPageBase{PageResult: r}} |
| }) |
| } |
| |
| // ListDatastoreParams will list all the available and supported parameters |
| // that can be used for a particular datastore ID and a particular version. |
| // For example, if you are wondering how you can configure a MySQL 5.6 instance, |
| // you can use this operation (you will need to retrieve the MySQL datastore ID |
| // by using the datastores API). |
| func ListDatastoreParams(client *gophercloud.ServiceClient, datastoreID, versionID string) pagination.Pager { |
| return pagination.NewPager(client, listDSParamsURL(client, datastoreID, versionID), func(r pagination.PageResult) pagination.Page { |
| return ParamPage{pagination.SinglePageBase(r)} |
| }) |
| } |
| |
| // GetDatastoreParam will retrieve information about a specific configuration |
| // parameter. For example, you can use this operation to understand more about |
| // "innodb_file_per_table" configuration param for MySQL datastores. You will |
| // need the param's ID first, which can be attained by using the ListDatastoreParams |
| // operation. |
| func GetDatastoreParam(client *gophercloud.ServiceClient, datastoreID, versionID, paramID string) (r ParamResult) { |
| _, r.Err = client.Get(getDSParamURL(client, datastoreID, versionID, paramID), &r.Body, nil) |
| return |
| } |
| |
| // ListGlobalParams is similar to ListDatastoreParams but does not require a |
| // DatastoreID. |
| func ListGlobalParams(client *gophercloud.ServiceClient, versionID string) pagination.Pager { |
| return pagination.NewPager(client, listGlobalParamsURL(client, versionID), func(r pagination.PageResult) pagination.Page { |
| return ParamPage{pagination.SinglePageBase(r)} |
| }) |
| } |
| |
| // GetGlobalParam is similar to GetDatastoreParam but does not require a |
| // DatastoreID. |
| func GetGlobalParam(client *gophercloud.ServiceClient, versionID, paramID string) (r ParamResult) { |
| _, r.Err = client.Get(getGlobalParamURL(client, versionID, paramID), &r.Body, nil) |
| return |
| } |