Skip to content

Commit 5f8f52e

Browse files
committed
Remove duplicate database code in provider logic
1 parent 4c908b6 commit 5f8f52e

File tree

6 files changed

+37
-170
lines changed

6 files changed

+37
-170
lines changed

pkg/postgres/aws.go

Lines changed: 0 additions & 80 deletions
This file was deleted.

pkg/postgres/azure.go

Lines changed: 0 additions & 50 deletions
This file was deleted.

pkg/postgres/database.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,14 @@ const (
2929
)
3030

3131
func (c *pg) CreateDB(dbname, role string) error {
32-
_, err := c.db.Exec(fmt.Sprintf(CREATE_DB, dbname))
32+
// Have to add the master role to the group role before we can transfer the database owner
33+
err := c.GrantRole(role, c.user)
34+
if err != nil {
35+
return err
36+
}
37+
38+
// Create database
39+
_, err = c.db.Exec(fmt.Sprintf(CREATE_DB, dbname))
3340
if err != nil {
3441
// eat DUPLICATE DATABASE ERROR
3542
if err.(*pq.Error).Code != "42P04" {

pkg/postgres/gcp.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55

66
"github.com/go-logr/logr"
7-
"github.com/lib/pq"
87
)
98

109
type gcppg struct {
@@ -17,47 +16,11 @@ func newGCPPG(postgres *pg) PG {
1716
}
1817
}
1918

20-
func (c *gcppg) CreateDB(dbname, role string) error {
21-
22-
err := c.GrantRole(role, c.user)
23-
if err != nil {
24-
return err
25-
}
26-
err = c.pg.CreateDB(dbname, role)
27-
if err != nil {
28-
return err
29-
}
30-
return nil
31-
}
32-
3319
func (c *gcppg) DropRole(role, newOwner, database string, logger logr.Logger) error {
3420
if role == "alloydbsuperuser" || role == "postgres" {
3521
logger.Info(fmt.Sprintf("not dropping %s as it is a reserved AlloyDB role", role))
3622
return nil
3723
}
38-
// On AlloyDB the postgres or other alloydbsuperuser members, aren't really superusers so they don't have permissions
39-
// to REASSIGN OWNED BY unless he belongs to both roles
40-
err := c.GrantRole(role, c.user)
41-
if err != nil && err.(*pq.Error).Code != "0LP01" {
42-
if err.(*pq.Error).Code == "42704" {
43-
// The group role does not exist, no point in continuing
44-
return nil
45-
}
46-
return err
47-
}
48-
defer c.RevokeRole(role, c.user)
49-
if newOwner != c.user {
50-
err = c.GrantRole(newOwner, c.user)
51-
if err != nil && err.(*pq.Error).Code != "0LP01" {
52-
if err.(*pq.Error).Code == "42704" {
53-
// The group role does not exist, no point of granting roles
54-
logger.Info(fmt.Sprintf("not granting %s to %s as %s does not exist", role, newOwner, newOwner))
55-
return nil
56-
}
57-
return err
58-
}
59-
defer c.RevokeRole(newOwner, c.user)
60-
}
6124

6225
return c.pg.DropRole(role, newOwner, database, logger)
6326
}

pkg/postgres/postgres.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ func NewPG(cfg *config.Cfg, logger logr.Logger) (PG, error) {
7474
switch cfg.CloudProvider {
7575
case "AWS":
7676
logger.Info("Using AWS wrapper")
77-
return newAWSPG(postgres), nil
77+
return postgres, nil
7878
case "Azure":
7979
logger.Info("Using Azure wrapper")
80-
return newAzurePG(postgres), nil
80+
return postgres, nil
8181
case "GCP":
8282
logger.Info("Using GCP wrapper")
8383
return newGCPPG(postgres), nil

pkg/postgres/role.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ func (c *pg) CreateUserRole(role, password string) (string, error) {
4848
if err != nil {
4949
return "", err
5050
}
51+
52+
err = c.GrantRole(role, c.user)
53+
if err != nil {
54+
return "", err
55+
}
5156
return role, nil
5257
}
5358

@@ -76,6 +81,28 @@ func (c *pg) RevokeRole(role, revoked string) error {
7681
}
7782

7883
func (c *pg) DropRole(role, newOwner, database string, logger logr.Logger) error {
84+
err := c.GrantRole(role, c.user)
85+
if err != nil && err.(*pq.Error).Code != "0LP01" {
86+
if err.(*pq.Error).Code == "42704" {
87+
// The group role does not exist, no point in continuing
88+
return nil
89+
}
90+
return err
91+
}
92+
defer c.RevokeRole(role, c.user)
93+
if newOwner != c.user {
94+
err = c.GrantRole(newOwner, c.user)
95+
if err != nil && err.(*pq.Error).Code != "0LP01" {
96+
if err.(*pq.Error).Code == "42704" {
97+
// The group role does not exist, no point of granting roles
98+
logger.Info(fmt.Sprintf("not granting %s to %s as %s does not exist", role, newOwner, newOwner))
99+
return nil
100+
}
101+
return err
102+
}
103+
defer c.RevokeRole(newOwner, c.user)
104+
}
105+
79106
// REASSIGN OWNED BY only works if the correct database is selected
80107
tmpDb, err := GetConnection(c.user, c.pass, c.host, database, c.args, logger)
81108
if err != nil {

0 commit comments

Comments
 (0)