Skip to content

Commit 55a1975

Browse files
modular-magicianScottSuarez
authored andcommitted
Revert "Replaced users.list api with users.get api to increase efficiency." (#8024) (#5688)
Signed-off-by: Modular Magician <[email protected]>
1 parent 12e1d94 commit 55a1975

File tree

3 files changed

+41
-16
lines changed

3 files changed

+41
-16
lines changed

.changelog/8024.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
```release-note:none
2+
```

google-beta/resource_sql_database_instance.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,25 +1067,27 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
10671067
// Users in a replica instance are inherited from the master instance and should be left alone.
10681068
// This deletion is done immediately after the instance is created, in order to minimize the
10691069
// risk of it being left on the instance, which would present a security concern.
1070-
if sqlDatabaseIsMaster(d) && strings.Contains(strings.ToUpper(databaseVersion), "MYSQL") {
1071-
var user *sqladmin.User
1070+
if sqlDatabaseIsMaster(d) {
1071+
var users *sqladmin.UsersListResponse
10721072
err = transport_tpg.RetryTimeDuration(func() error {
1073-
user, err = config.NewSqlAdminClient(userAgent).Users.Get(project, instance.Name, "root").Host("%").Do()
1073+
users, err = config.NewSqlAdminClient(userAgent).Users.List(project, instance.Name).Do()
10741074
return err
10751075
}, d.Timeout(schema.TimeoutRead), transport_tpg.IsSqlOperationInProgressError)
10761076
if err != nil {
1077-
return fmt.Errorf("Error, attempting to fetch root user associated with instance %s: %s", instance.Name, err)
1077+
return fmt.Errorf("Error, attempting to list users associated with instance %s: %s", instance.Name, err)
10781078
}
1079-
if user != nil {
1080-
err = transport_tpg.Retry(func() error {
1081-
op, err = config.NewSqlAdminClient(userAgent).Users.Delete(project, instance.Name).Host(user.Host).Name(user.Name).Do()
1082-
if err == nil {
1083-
err = SqlAdminOperationWaitTime(config, op, project, "Delete default root User", userAgent, d.Timeout(schema.TimeoutCreate))
1079+
for _, u := range users.Items {
1080+
if u.Name == "root" && u.Host == "%" {
1081+
err = transport_tpg.Retry(func() error {
1082+
op, err = config.NewSqlAdminClient(userAgent).Users.Delete(project, instance.Name).Host(u.Host).Name(u.Name).Do()
1083+
if err == nil {
1084+
err = SqlAdminOperationWaitTime(config, op, project, "Delete default root User", userAgent, d.Timeout(schema.TimeoutCreate))
1085+
}
1086+
return err
1087+
})
1088+
if err != nil {
1089+
return fmt.Errorf("Error, failed to delete default 'root'@'*' user, but the database was created successfully: %s", err)
10841090
}
1085-
return err
1086-
})
1087-
if err != nil {
1088-
return fmt.Errorf("Error, failed to delete default 'root'@'*' user, but the database was created successfully: %s", err)
10891091
}
10901092
}
10911093
}

google-beta/resource_sql_user.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ func ResourceSqlUser() *schema.Resource {
123123
"password_policy": {
124124
Type: schema.TypeList,
125125
Optional: true,
126-
Computed: true,
127126
MaxItems: 1,
128127
Elem: &schema.Resource{
129128
Schema: map[string]*schema.Schema{
@@ -207,6 +206,7 @@ func expandPasswordPolicy(cfg interface{}) *sqladmin.UserPasswordValidationPolic
207206
raw := cfg.([]interface{})[0].(map[string]interface{})
208207

209208
upvp := &sqladmin.UserPasswordValidationPolicy{}
209+
210210
if v, ok := raw["allowed_failed_attempts"]; ok {
211211
upvp.AllowedFailedAttempts = int64(v.(int))
212212
}
@@ -316,17 +316,38 @@ func resourceSqlUserRead(d *schema.ResourceData, meta interface{}) error {
316316
name := d.Get("name").(string)
317317
host := d.Get("host").(string)
318318

319-
var user *sqladmin.User
319+
var users *sqladmin.UsersListResponse
320320
err = nil
321321
err = transport_tpg.RetryTime(func() error {
322-
user, err = config.NewSqlAdminClient(userAgent).Users.Get(project, instance, name).Host(host).Do()
322+
users, err = config.NewSqlAdminClient(userAgent).Users.List(project, instance).Do()
323323
return err
324324
}, 5)
325325
if err != nil {
326326
// move away from transport_tpg.HandleNotFoundError() as we need to handle both 404 and 403
327327
return handleUserNotFoundError(err, d, fmt.Sprintf("SQL User %q in instance %q", name, instance))
328328
}
329329

330+
var user *sqladmin.User
331+
databaseInstance, err := config.NewSqlAdminClient(userAgent).Instances.Get(project, instance).Do()
332+
if err != nil {
333+
return err
334+
}
335+
336+
for _, currentUser := range users.Items {
337+
if !strings.Contains(databaseInstance.DatabaseVersion, "POSTGRES") {
338+
name = strings.Split(name, "@")[0]
339+
}
340+
341+
if currentUser.Name == name {
342+
// Host can only be empty for postgres instances,
343+
// so don't compare the host if the API host is empty.
344+
if host == "" || currentUser.Host == host {
345+
user = currentUser
346+
break
347+
}
348+
}
349+
}
350+
330351
if user == nil {
331352
log.Printf("[WARN] Removing SQL User %q because it's gone", d.Get("name").(string))
332353
d.SetId("")

0 commit comments

Comments
 (0)