Fix escaping of parameter values and extra spaces.
- document the newly introduced option (for now in the main README) - make query error output more readable.
This commit is contained in:
parent
415a7fdc4d
commit
71f57c9fe3
|
|
@ -201,6 +201,14 @@ The following steps will get you the docker image built and deployed.
|
|||
$ make docker
|
||||
$ sed -e "s/\(image\:.*\:\).*$/\1$TAG/" manifests/postgres-operator.yaml|kubectl --context minikube create -f -
|
||||
|
||||
|
||||
### Operator Configuration Parameters
|
||||
|
||||
* api_roles_configuration - a map represented as *"key1:value1,key2:value2"*
|
||||
of configuration parameters applied to the roles fetched from the API.
|
||||
By default is set to *"log_statement:all"*. See [PostgreSQL documentation on ALTER ROLE .. SET](https://www.postgresql.org/docs/current/static/sql-alterrole.html) for to learn about the available options.
|
||||
|
||||
|
||||
### Debugging the operator itself
|
||||
|
||||
There is a web interface in the operator to observe its internal state. The operator listens on port 8080. It is possible to expose it to the localhost:8080 by doing:
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ type Config struct {
|
|||
APIPort int `name:"api_port" default:"8080"`
|
||||
RingLogLines int `name:"ring_log_lines" default:"100"`
|
||||
ClusterHistoryEntries int `name:"cluster_history_entries" default:"1000"`
|
||||
APIRolesParameters map[string]string `name:"api_roles_configuration" default:"log_statement:all"`
|
||||
APIRolesParameters map[string]string `name:"api_roles_configuration" default:"log_statement:'all'"`
|
||||
|
||||
PodTerminateGracePeriod time.Duration `name:"pod_terminate_grace_period" default:"5m"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ const (
|
|||
createUserSQL = `SET LOCAL synchronous_commit = 'local'; CREATE ROLE "%s" %s %s;`
|
||||
alterUserSQL = `ALTER ROLE "%s" %s`
|
||||
alterRoleResetAllSQL = `ALTER ROLE "%s" RESET ALL`
|
||||
alterRoleSetSQL = `ALTER ROLE "%s" SET "%s" TO "%s"`
|
||||
alterRoleSetSQL = `ALTER ROLE "%s" SET %s TO %s`
|
||||
grantToUserSQL = `GRANT %s TO "%s"`
|
||||
doBlockStmt = `SET LOCAL synchronous_commit = 'local'; DO $$ BEGIN %s; END;$$;`
|
||||
passwordTemplate = "ENCRYPTED PASSWORD '%s'"
|
||||
|
|
@ -96,7 +96,7 @@ func (strategy DefaultUserSyncStrategy) alterPgUserSet(user spec.PgUser, db *sql
|
|||
queries := produceAlterRoleSetStmts(user)
|
||||
query := fmt.Sprintf(doBlockStmt, strings.Join(queries, ";"))
|
||||
if _, err = db.Query(query); err != nil {
|
||||
err = fmt.Errorf("dB error: %v, query: %q", err, query)
|
||||
err = fmt.Errorf("dB error: %v, query: %s", err, query)
|
||||
return
|
||||
}
|
||||
return
|
||||
|
|
@ -122,7 +122,7 @@ func (s DefaultUserSyncStrategy) createPgUser(user spec.PgUser, db *sql.DB) (err
|
|||
|
||||
_, err = db.Query(query) // TODO: Try several times
|
||||
if err != nil {
|
||||
err = fmt.Errorf("dB error: %v, query: %q", err, query)
|
||||
err = fmt.Errorf("dB error: %v, query: %s", err, query)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -148,7 +148,7 @@ func (s DefaultUserSyncStrategy) alterPgUser(user spec.PgUser, db *sql.DB) (err
|
|||
|
||||
_, err = db.Query(query) // TODO: Try several times
|
||||
if err != nil {
|
||||
err = fmt.Errorf("dB error: %v query %q", err, query)
|
||||
err = fmt.Errorf("dB error: %v query %s", err, query)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ func (s DefaultUserSyncStrategy) alterPgUser(user spec.PgUser, db *sql.DB) (err
|
|||
|
||||
func produceAlterStmt(user spec.PgUser) string {
|
||||
// ALTER ROLE ... LOGIN ENCRYPTED PASSWORD ..
|
||||
result := make([]string, 1)
|
||||
result := make([]string, 0)
|
||||
password := user.Password
|
||||
flags := user.Flags
|
||||
|
||||
|
|
@ -171,10 +171,10 @@ func produceAlterStmt(user spec.PgUser) string {
|
|||
}
|
||||
|
||||
func produceAlterRoleSetStmts(user spec.PgUser) []string {
|
||||
result := make([]string, 1)
|
||||
result := make([]string, 0)
|
||||
result = append(result, fmt.Sprintf(alterRoleResetAllSQL, user.Name))
|
||||
for key, value := range(user.Parameters) {
|
||||
result = append(result, fmt.Sprintf(alterRoleSetSQL, user.Name, key, value))
|
||||
result = append(result, fmt.Sprintf(alterRoleSetSQL, user.Name, key, quoteValue(value)))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
@ -191,3 +191,12 @@ func quoteMemberList(user spec.PgUser) string {
|
|||
}
|
||||
return strings.Join(memberof, ",")
|
||||
}
|
||||
|
||||
// quoteVal quotes values to be used at ALTER ROLE SET param = value if necessary
|
||||
func quoteValue(val string) string {
|
||||
if (strings.HasPrefix(val, `"`) && strings.HasSuffix(val, `"`)) ||
|
||||
(strings.HasPrefix(val, `'`) && strings.HasSuffix(val, `'`)) {
|
||||
return val
|
||||
}
|
||||
return fmt.Sprintf(`"%s"`, strings.Trim(val," "))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue