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 }