/Godeps/_workspace/src/github.com/rackspace/gophercloud/rackspace/db/v1/instances/requests.go
https://gitlab.com/vectorci/kubernetes · Go · 199 lines · 114 code · 38 blank · 47 comment · 18 complexity · 296763bf1477e7216b01aba884b2f376 MD5 · raw file
- package instances
- import (
- "github.com/rackspace/gophercloud"
- osDBs "github.com/rackspace/gophercloud/openstack/db/v1/databases"
- os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
- osUsers "github.com/rackspace/gophercloud/openstack/db/v1/users"
- "github.com/rackspace/gophercloud/pagination"
- "github.com/rackspace/gophercloud/rackspace/db/v1/backups"
- )
- // CreateOpts is the struct responsible for configuring a new database instance.
- type CreateOpts struct {
- // Either the integer UUID (in string form) of the flavor, or its URI
- // reference as specified in the response from the List() call. Required.
- FlavorRef string
- // Specifies the volume size in gigabytes (GB). The value must be between 1
- // and 300. Required.
- Size int
- // Name of the instance to create. The length of the name is limited to
- // 255 characters and any characters are permitted. Optional.
- Name string
- // A slice of database information options.
- Databases osDBs.CreateOptsBuilder
- // A slice of user information options.
- Users osUsers.CreateOptsBuilder
- // ID of the configuration group to associate with the instance. Optional.
- ConfigID string
- // Options to configure the type of datastore the instance will use. This is
- // optional, and if excluded will default to MySQL.
- Datastore *os.DatastoreOpts
- // Specifies the backup ID from which to restore the database instance. There
- // are some things to be aware of before using this field. When you execute
- // the Restore Backup operation, a new database instance is created to store
- // the backup whose ID is specified by the restorePoint attribute. This will
- // mean that:
- // - All users, passwords and access that were on the instance at the time of
- // the backup will be restored along with the databases.
- // - You can create new users or databases if you want, but they cannot be
- // the same as the ones from the instance that was backed up.
- RestorePoint string
- ReplicaOf string
- }
- func (opts CreateOpts) ToInstanceCreateMap() (map[string]interface{}, error) {
- instance, err := os.CreateOpts{
- FlavorRef: opts.FlavorRef,
- Size: opts.Size,
- Name: opts.Name,
- Databases: opts.Databases,
- Users: opts.Users,
- }.ToInstanceCreateMap()
- if err != nil {
- return nil, err
- }
- instance = instance["instance"].(map[string]interface{})
- if opts.ConfigID != "" {
- instance["configuration"] = opts.ConfigID
- }
- if opts.Datastore != nil {
- ds, err := opts.Datastore.ToMap()
- if err != nil {
- return nil, err
- }
- instance["datastore"] = ds
- }
- if opts.RestorePoint != "" {
- instance["restorePoint"] = map[string]string{"backupRef": opts.RestorePoint}
- }
- if opts.ReplicaOf != "" {
- instance["replica_of"] = opts.ReplicaOf
- }
- return map[string]interface{}{"instance": instance}, nil
- }
- // 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 os.CreateOptsBuilder) CreateResult {
- return CreateResult{os.Create(client, opts)}
- }
- // ListOpts specifies all of the query options to be used when returning a list
- // of database instances.
- type ListOpts struct {
- // IncludeHA includes or excludes High Availability instances from the result set
- IncludeHA bool `q:"include_ha"`
- // IncludeReplicas includes or excludes Replica instances from the result set
- IncludeReplicas bool `q:"include_replicas"`
- }
- // ToInstanceListQuery formats a ListOpts into a query string.
- func (opts ListOpts) ToInstanceListQuery() (string, error) {
- q, err := gophercloud.BuildQueryString(opts)
- if err != nil {
- return "", err
- }
- return q.String(), nil
- }
- // List retrieves the status and information for all database instances.
- func List(client *gophercloud.ServiceClient, opts *ListOpts) pagination.Pager {
- url := baseURL(client)
- if opts != nil {
- query, err := opts.ToInstanceListQuery()
- if err != nil {
- return pagination.Pager{Err: err}
- }
- url += query
- }
- createPageFn := func(r pagination.PageResult) pagination.Page {
- return os.InstancePage{pagination.LinkedPageBase{PageResult: r}}
- }
- return pagination.NewPager(client, url, createPageFn)
- }
- // 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
- }
- // 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
- }
- // DetachFromConfigGroup will detach an instance from all config groups.
- func DetachFromConfigGroup(client *gophercloud.ServiceClient, instanceID string) UpdateResult {
- return AssociateWithConfigGroup(client, instanceID, "")
- }
- // ListBackups will list all the backups for a specified database instance.
- func ListBackups(client *gophercloud.ServiceClient, instanceID string) pagination.Pager {
- pageFn := func(r pagination.PageResult) pagination.Page {
- return backups.BackupPage{pagination.SinglePageBase(r)}
- }
- return pagination.NewPager(client, backupsURL(client, instanceID), pageFn)
- }
- // 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
- }