set IsDbOwner in ProduceSyncRequests
This commit is contained in:
parent
e6156dbcfa
commit
f1fdb4077c
|
|
@ -164,9 +164,13 @@ class EndToEndTestCase(unittest.TestCase):
|
||||||
Test granting additional roles to existing database owners
|
Test granting additional roles to existing database owners
|
||||||
'''
|
'''
|
||||||
k8s = self.k8s
|
k8s = self.k8s
|
||||||
|
|
||||||
|
# first test - wait for the operator to get in sync and set everything up
|
||||||
|
self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"},
|
||||||
|
"Operator does not get in sync")
|
||||||
leader = k8s.get_cluster_leader_pod()
|
leader = k8s.get_cluster_leader_pod()
|
||||||
|
|
||||||
# produce wrong membership from v1.8.0
|
# produce wrong membership for cron_admin
|
||||||
grant_dbowner = """
|
grant_dbowner = """
|
||||||
GRANT bar_owner TO cron_admin;
|
GRANT bar_owner TO cron_admin;
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,6 @@ func (strategy DefaultUserSyncStrategy) ProduceSyncRequests(dbUsers spec.PgUserM
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
r := spec.PgSyncUserRequest{}
|
r := spec.PgSyncUserRequest{}
|
||||||
r.User = dbUser
|
|
||||||
newMD5Password := util.NewEncryptor(strategy.PasswordEncryption).PGUserPassword(newUser)
|
newMD5Password := util.NewEncryptor(strategy.PasswordEncryption).PGUserPassword(newUser)
|
||||||
|
|
||||||
// do not compare for roles coming from docker image
|
// do not compare for roles coming from docker image
|
||||||
|
|
@ -62,12 +61,13 @@ func (strategy DefaultUserSyncStrategy) ProduceSyncRequests(dbUsers spec.PgUserM
|
||||||
r.User.Password = newMD5Password
|
r.User.Password = newMD5Password
|
||||||
r.Kind = spec.PGsyncUserAlter
|
r.Kind = spec.PGsyncUserAlter
|
||||||
}
|
}
|
||||||
if addNewFlags, equal := util.SubstractStringSlices(newUser.Flags, dbUser.Flags); !equal {
|
|
||||||
r.User.Flags = addNewFlags
|
|
||||||
r.Kind = spec.PGsyncUserAlter
|
|
||||||
}
|
|
||||||
if addNewRoles, equal := util.SubstractStringSlices(newUser.MemberOf, dbUser.MemberOf); !equal {
|
if addNewRoles, equal := util.SubstractStringSlices(newUser.MemberOf, dbUser.MemberOf); !equal {
|
||||||
r.User.MemberOf = addNewRoles
|
r.User.MemberOf = addNewRoles
|
||||||
|
r.User.IsDbOwner = newUser.IsDbOwner
|
||||||
|
r.Kind = spec.PGsyncUserAlter
|
||||||
|
}
|
||||||
|
if addNewFlags, equal := util.SubstractStringSlices(newUser.Flags, dbUser.Flags); !equal {
|
||||||
|
r.User.Flags = addNewFlags
|
||||||
r.Kind = spec.PGsyncUserAlter
|
r.Kind = spec.PGsyncUserAlter
|
||||||
}
|
}
|
||||||
if r.Kind == spec.PGsyncUserAlter {
|
if r.Kind == spec.PGsyncUserAlter {
|
||||||
|
|
@ -118,6 +118,8 @@ func (strategy DefaultUserSyncStrategy) ExecuteSyncRequests(requests []spec.PgSy
|
||||||
if err := strategy.alterPgUser(request.User, db); err != nil {
|
if err := strategy.alterPgUser(request.User, db); err != nil {
|
||||||
reqretries = append(reqretries, request)
|
reqretries = append(reqretries, request)
|
||||||
errors = append(errors, fmt.Sprintf("could not alter user %q: %v", request.User.Name, err))
|
errors = append(errors, fmt.Sprintf("could not alter user %q: %v", request.User.Name, err))
|
||||||
|
// check if additional owners are misconfigured as members to a database owner
|
||||||
|
// resolve it by revoking the database owner from the additional owner role
|
||||||
if request.User.IsDbOwner && len(additionalOwnerRoles) > 0 {
|
if request.User.IsDbOwner && len(additionalOwnerRoles) > 0 {
|
||||||
if err := resolveOwnerMembership(request.User, additionalOwnerRoles, db); err != nil {
|
if err := resolveOwnerMembership(request.User, additionalOwnerRoles, db); err != nil {
|
||||||
errors = append(errors, fmt.Sprintf("could not resolve owner membership for %q: %v", request.User.Name, err))
|
errors = append(errors, fmt.Sprintf("could not resolve owner membership for %q: %v", request.User.Name, err))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue