|
4 | 4 | "fmt"
|
5 | 5 | "log"
|
6 | 6 | "net/url"
|
7 |
| - "strings" |
8 | 7 | "time"
|
9 | 8 |
|
10 | 9 | "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
@@ -80,43 +79,14 @@ func resourceCloudProjectDatabaseM3dbUser() *schema.Resource {
|
80 | 79 | }
|
81 | 80 |
|
82 | 81 | func resourceCloudProjectDatabaseM3dbUserImportState(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
|
83 |
| - givenId := d.Id() |
84 |
| - n := 3 |
85 |
| - splitId := strings.SplitN(givenId, "/", n) |
86 |
| - if len(splitId) != n { |
87 |
| - return nil, fmt.Errorf("Import Id is not service_name/cluster_id/id formatted") |
88 |
| - } |
89 |
| - serviceName := splitId[0] |
90 |
| - clusterId := splitId[1] |
91 |
| - id := splitId[2] |
92 |
| - d.SetId(id) |
93 |
| - d.Set("cluster_id", clusterId) |
94 |
| - d.Set("service_name", serviceName) |
95 |
| - |
96 |
| - results := make([]*schema.ResourceData, 1) |
97 |
| - results[0] = d |
98 |
| - return results, nil |
| 82 | + return importCloudProjectDatabaseUser(d, meta) |
99 | 83 | }
|
100 | 84 |
|
101 | 85 | func resourceCloudProjectDatabaseM3dbUserCreate(d *schema.ResourceData, meta interface{}) error {
|
102 |
| - serviceName := d.Get("service_name").(string) |
103 |
| - clusterId := d.Get("cluster_id").(string) |
104 |
| - |
105 |
| - endpoint := fmt.Sprintf("/cloud/project/%s/database/m3db/%s/user", |
106 |
| - url.PathEscape(serviceName), |
107 |
| - url.PathEscape(clusterId), |
108 |
| - ) |
109 |
| - params := (&CloudProjectDatabaseM3dbUserCreateOpts{}).FromResource(d) |
110 |
| - res := &CloudProjectDatabaseUserResponse{} |
111 |
| - |
112 |
| - log.Printf("[DEBUG] Will create user: %+v for cluster %s from project %s", params, clusterId, serviceName) |
113 |
| - err := postCloudProjectDatabaseUser(d, meta, "m3db", endpoint, params, res, schema.TimeoutCreate) |
114 |
| - if err != nil { |
115 |
| - return err |
| 86 | + f := func() interface{} { |
| 87 | + return (&CloudProjectDatabaseM3dbUserCreateOpts{}).FromResource(d) |
116 | 88 | }
|
117 |
| - |
118 |
| - d.SetId(res.Id) |
119 |
| - return resourceCloudProjectDatabaseM3dbUserRead(d, meta) |
| 89 | + return postCloudProjectDatabaseUser(d, meta, "m3db", dataSourceCloudProjectDatabaseM3dbUserRead, resourceCloudProjectDatabaseM3dbUserRead, resourceCloudProjectDatabaseM3dbUserUpdate, f) |
120 | 90 | }
|
121 | 91 |
|
122 | 92 | func resourceCloudProjectDatabaseM3dbUserRead(d *schema.ResourceData, meta interface{}) error {
|
@@ -150,71 +120,12 @@ func resourceCloudProjectDatabaseM3dbUserRead(d *schema.ResourceData, meta inter
|
150 | 120 | }
|
151 | 121 |
|
152 | 122 | func resourceCloudProjectDatabaseM3dbUserUpdate(d *schema.ResourceData, meta interface{}) error {
|
153 |
| - config := meta.(*Config) |
154 |
| - serviceName := d.Get("service_name").(string) |
155 |
| - clusterId := d.Get("cluster_id").(string) |
156 |
| - passwordReset := d.HasChange("password_reset") |
157 |
| - id := d.Id() |
158 |
| - |
159 |
| - endpoint := fmt.Sprintf("/cloud/project/%s/database/m3db/%s/user/%s", |
160 |
| - url.PathEscape(serviceName), |
161 |
| - url.PathEscape(clusterId), |
162 |
| - url.PathEscape(id), |
163 |
| - ) |
164 |
| - params := (&CloudProjectDatabaseM3dbUserUpdateOpts{}).FromResource(d) |
165 |
| - |
166 |
| - log.Printf("[DEBUG] Will update user: %+v from cluster %s from project %s", params, clusterId, serviceName) |
167 |
| - err := config.OVHClient.Put(endpoint, params, nil) |
168 |
| - if err != nil { |
169 |
| - return fmt.Errorf("calling Put %s with params %+v:\n\t %q", endpoint, params, err) |
170 |
| - } |
171 |
| - |
172 |
| - log.Printf("[DEBUG] Waiting for user %s to be READY", id) |
173 |
| - err = waitForCloudProjectDatabaseUserReady(config.OVHClient, serviceName, "m3db", clusterId, id, d.Timeout(schema.TimeoutUpdate)) |
174 |
| - if err != nil { |
175 |
| - return fmt.Errorf("timeout while waiting user %s to be READY: %w", id, err) |
| 123 | + f := func() interface{} { |
| 124 | + return (&CloudProjectDatabaseM3dbUserUpdateOpts{}).FromResource(d) |
176 | 125 | }
|
177 |
| - log.Printf("[DEBUG] user %s is READY", id) |
178 |
| - |
179 |
| - if passwordReset { |
180 |
| - pwdResetEndpoint := endpoint + "/credentials/reset" |
181 |
| - res := &CloudProjectDatabaseUserResponse{} |
182 |
| - log.Printf("[DEBUG] Will update user password for cluster %s from project %s", clusterId, serviceName) |
183 |
| - err := postCloudProjectDatabaseUser(d, meta, "m3db", pwdResetEndpoint, nil, res, schema.TimeoutUpdate) |
184 |
| - if err != nil { |
185 |
| - return err |
186 |
| - } |
187 |
| - } |
188 |
| - |
189 |
| - return resourceCloudProjectDatabaseM3dbUserRead(d, meta) |
| 126 | + return updateCloudProjectDatabaseUser(d, meta, "m3db", resourceCloudProjectDatabaseM3dbUserRead, f) |
190 | 127 | }
|
191 | 128 |
|
192 | 129 | func resourceCloudProjectDatabaseM3dbUserDelete(d *schema.ResourceData, meta interface{}) error {
|
193 |
| - config := meta.(*Config) |
194 |
| - serviceName := d.Get("service_name").(string) |
195 |
| - clusterId := d.Get("cluster_id").(string) |
196 |
| - id := d.Id() |
197 |
| - |
198 |
| - endpoint := fmt.Sprintf("/cloud/project/%s/database/m3db/%s/user/%s", |
199 |
| - url.PathEscape(serviceName), |
200 |
| - url.PathEscape(clusterId), |
201 |
| - url.PathEscape(id), |
202 |
| - ) |
203 |
| - |
204 |
| - log.Printf("[DEBUG] Will delete user %s from cluster %s from project %s", id, clusterId, serviceName) |
205 |
| - err := config.OVHClient.Delete(endpoint, nil) |
206 |
| - if err != nil { |
207 |
| - return helpers.CheckDeleted(d, err, endpoint) |
208 |
| - } |
209 |
| - |
210 |
| - log.Printf("[DEBUG] Waiting for user %s to be DELETED", id) |
211 |
| - err = waitForCloudProjectDatabaseUserDeleted(config.OVHClient, serviceName, "m3db", clusterId, id, d.Timeout(schema.TimeoutDelete)) |
212 |
| - if err != nil { |
213 |
| - return fmt.Errorf("timeout while waiting user %s to be DELETED: %w", id, err) |
214 |
| - } |
215 |
| - log.Printf("[DEBUG] user %s is DELETED", id) |
216 |
| - |
217 |
| - d.SetId("") |
218 |
| - |
219 |
| - return nil |
| 130 | + return deleteCloudProjectDatabaseUser(d, meta, "m3db") |
220 | 131 | }
|
0 commit comments