github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/db/v1/configurations/requests.go (about)

     1  package configurations
     2  
     3  import (
     4  	"github.com/huaweicloud/golangsdk"
     5  	"github.com/huaweicloud/golangsdk/openstack/db/v1/instances"
     6  	"github.com/huaweicloud/golangsdk/pagination"
     7  )
     8  
     9  // List will list all of the available configurations.
    10  func List(client *golangsdk.ServiceClient) pagination.Pager {
    11  	return pagination.NewPager(client, baseURL(client), func(r pagination.PageResult) pagination.Page {
    12  		return ConfigPage{pagination.SinglePageBase(r)}
    13  	})
    14  }
    15  
    16  // CreateOptsBuilder is a top-level interface which renders a JSON map.
    17  type CreateOptsBuilder interface {
    18  	ToConfigCreateMap() (map[string]interface{}, error)
    19  }
    20  
    21  // DatastoreOpts is the primary options struct for creating and modifying
    22  // how configuration resources are associated with datastores.
    23  type DatastoreOpts struct {
    24  	// The type of datastore. Defaults to "MySQL".
    25  	Type string `json:"type,omitempty"`
    26  	// The specific version of a datastore. Defaults to "5.6".
    27  	Version string `json:"version,omitempty"`
    28  }
    29  
    30  // CreateOpts is the struct responsible for configuring new configurations.
    31  type CreateOpts struct {
    32  	// The configuration group name
    33  	Name string `json:"name" required:"true"`
    34  	// A map of user-defined configuration settings that will define
    35  	// how each associated datastore works. Each key/value pair is specific to a
    36  	// datastore type.
    37  	Values map[string]interface{} `json:"values" required:"true"`
    38  	// Associates the configuration group with a particular datastore.
    39  	Datastore *DatastoreOpts `json:"datastore,omitempty"`
    40  	// A human-readable explanation for the group.
    41  	Description string `json:"description,omitempty"`
    42  }
    43  
    44  // ToConfigCreateMap casts a CreateOpts struct into a JSON map.
    45  func (opts CreateOpts) ToConfigCreateMap() (map[string]interface{}, error) {
    46  	return golangsdk.BuildRequestBody(opts, "configuration")
    47  }
    48  
    49  // Create will create a new configuration group.
    50  func Create(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
    51  	b, err := opts.ToConfigCreateMap()
    52  	if err != nil {
    53  		r.Err = err
    54  		return
    55  	}
    56  	_, r.Err = client.Post(baseURL(client), &b, &r.Body, &golangsdk.RequestOpts{OkCodes: []int{200}})
    57  	return
    58  }
    59  
    60  // Get will retrieve the details for a specified configuration group.
    61  func Get(client *golangsdk.ServiceClient, configID string) (r GetResult) {
    62  	_, r.Err = client.Get(resourceURL(client, configID), &r.Body, nil)
    63  	return
    64  }
    65  
    66  // UpdateOptsBuilder is the top-level interface for casting update options into
    67  // JSON maps.
    68  type UpdateOptsBuilder interface {
    69  	ToConfigUpdateMap() (map[string]interface{}, error)
    70  }
    71  
    72  // UpdateOpts is the struct responsible for modifying existing configurations.
    73  type UpdateOpts struct {
    74  	// The configuration group name
    75  	Name string `json:"name,omitempty"`
    76  	// A map of user-defined configuration settings that will define
    77  	// how each associated datastore works. Each key/value pair is specific to a
    78  	// datastore type.
    79  	Values map[string]interface{} `json:"values,omitempty"`
    80  	// Associates the configuration group with a particular datastore.
    81  	Datastore *DatastoreOpts `json:"datastore,omitempty"`
    82  	// A human-readable explanation for the group.
    83  	Description string `json:"description,omitempty"`
    84  }
    85  
    86  // ToConfigUpdateMap will cast an UpdateOpts struct into a JSON map.
    87  func (opts UpdateOpts) ToConfigUpdateMap() (map[string]interface{}, error) {
    88  	return golangsdk.BuildRequestBody(opts, "configuration")
    89  }
    90  
    91  // Update will modify an existing configuration group by performing a merge
    92  // between new and existing values. If the key already exists, the new value
    93  // will overwrite. All other keys will remain unaffected.
    94  func Update(client *golangsdk.ServiceClient, configID string, opts UpdateOptsBuilder) (r UpdateResult) {
    95  	b, err := opts.ToConfigUpdateMap()
    96  	if err != nil {
    97  		r.Err = err
    98  		return
    99  	}
   100  	_, r.Err = client.Patch(resourceURL(client, configID), &b, nil, nil)
   101  	return
   102  }
   103  
   104  // Replace will modify an existing configuration group by overwriting the
   105  // entire parameter group with the new values provided. Any existing keys not
   106  // included in UpdateOptsBuilder will be deleted.
   107  func Replace(client *golangsdk.ServiceClient, configID string, opts UpdateOptsBuilder) (r ReplaceResult) {
   108  	b, err := opts.ToConfigUpdateMap()
   109  	if err != nil {
   110  		r.Err = err
   111  		return
   112  	}
   113  	_, r.Err = client.Put(resourceURL(client, configID), &b, nil, nil)
   114  	return
   115  }
   116  
   117  // Delete will permanently delete a configuration group. Please note that
   118  // config groups cannot be deleted whilst still attached to running instances -
   119  // you must detach and then delete them.
   120  func Delete(client *golangsdk.ServiceClient, configID string) (r DeleteResult) {
   121  	_, r.Err = client.Delete(resourceURL(client, configID), nil)
   122  	return
   123  }
   124  
   125  // ListInstances will list all the instances associated with a particular
   126  // configuration group.
   127  func ListInstances(client *golangsdk.ServiceClient, configID string) pagination.Pager {
   128  	return pagination.NewPager(client, instancesURL(client, configID), func(r pagination.PageResult) pagination.Page {
   129  		return instances.InstancePage{LinkedPageBase: pagination.LinkedPageBase{PageResult: r}}
   130  	})
   131  }
   132  
   133  // ListDatastoreParams will list all the available and supported parameters
   134  // that can be used for a particular datastore ID and a particular version.
   135  // For example, if you are wondering how you can configure a MySQL 5.6 instance,
   136  // you can use this operation (you will need to retrieve the MySQL datastore ID
   137  // by using the datastores API).
   138  func ListDatastoreParams(client *golangsdk.ServiceClient, datastoreID, versionID string) pagination.Pager {
   139  	return pagination.NewPager(client, listDSParamsURL(client, datastoreID, versionID), func(r pagination.PageResult) pagination.Page {
   140  		return ParamPage{pagination.SinglePageBase(r)}
   141  	})
   142  }
   143  
   144  // GetDatastoreParam will retrieve information about a specific configuration
   145  // parameter. For example, you can use this operation to understand more about
   146  // "innodb_file_per_table" configuration param for MySQL datastores. You will
   147  // need the param's ID first, which can be attained by using the ListDatastoreParams
   148  // operation.
   149  func GetDatastoreParam(client *golangsdk.ServiceClient, datastoreID, versionID, paramID string) (r ParamResult) {
   150  	_, r.Err = client.Get(getDSParamURL(client, datastoreID, versionID, paramID), &r.Body, nil)
   151  	return
   152  }
   153  
   154  // ListGlobalParams is similar to ListDatastoreParams but does not require a
   155  // DatastoreID.
   156  func ListGlobalParams(client *golangsdk.ServiceClient, versionID string) pagination.Pager {
   157  	return pagination.NewPager(client, listGlobalParamsURL(client, versionID), func(r pagination.PageResult) pagination.Page {
   158  		return ParamPage{pagination.SinglePageBase(r)}
   159  	})
   160  }
   161  
   162  // GetGlobalParam is similar to GetDatastoreParam but does not require a
   163  // DatastoreID.
   164  func GetGlobalParam(client *golangsdk.ServiceClient, versionID, paramID string) (r ParamResult) {
   165  	_, r.Err = client.Get(getGlobalParamURL(client, versionID, paramID), &r.Body, nil)
   166  	return
   167  }