add DefaultUsers flag
This commit is contained in:
parent
31fd352fbd
commit
18da6e552d
|
|
@ -24,11 +24,12 @@ spec:
|
||||||
databases:
|
databases:
|
||||||
foo: zalando
|
foo: zalando
|
||||||
preparedDatabases:
|
preparedDatabases:
|
||||||
ab_db:
|
bar:
|
||||||
schemas:
|
schemas:
|
||||||
data: {}
|
data: {}
|
||||||
history:
|
history:
|
||||||
defaultRoles: false
|
defaultRoles: true
|
||||||
|
defaultUsers: false
|
||||||
|
|
||||||
# Expert section
|
# Expert section
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,15 +76,15 @@ type PostgresqlList struct {
|
||||||
Items []Postgresql `json:"items"`
|
Items []Postgresql `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PreparedDatabase describes elements to be bootstrapped (schemas, prod-prefix)
|
// PreparedDatabase describes elements to be bootstrapped
|
||||||
type PreparedDatabase struct {
|
type PreparedDatabase struct {
|
||||||
PreparedSchemas map[string]PreparedSchema `json:"schemas,omitempty"`
|
PreparedSchemas map[string]PreparedSchema `json:"schemas,omitempty"`
|
||||||
Prod bool `json:"prod,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PreparedSchema describes elements to be bootstrapped in the schema
|
// PreparedSchema describes elements to be bootstrapped in the schema
|
||||||
type PreparedSchema struct {
|
type PreparedSchema struct {
|
||||||
DefaultRoles *bool `json:"defaultRoles,omitempty" defaults:"true"`
|
DefaultRoles *bool `json:"defaultRoles,omitempty" defaults:"true"`
|
||||||
|
DefaultUsers bool `json:"defaultUsers,omitempty" defaults:"false"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MaintenanceWindow describes the time window when the operator is allowed to do maintenance on a cluster.
|
// MaintenanceWindow describes the time window when the operator is allowed to do maintenance on a cluster.
|
||||||
|
|
|
||||||
|
|
@ -786,9 +786,15 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
|
||||||
c.Spec.PreparedDatabases = preparedDatabases
|
c.Spec.PreparedDatabases = preparedDatabases
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defaultRoles := map[string]string{"_owner": "", "_reader": "", "_writer": "_reader"}
|
||||||
|
defaultUsers := map[string]string{"_owner_user": "_owner", "_reader_user": "_reader", "_writer_user": "_writer"}
|
||||||
|
|
||||||
for preparedDbName, preparedDB := range preparedDatabases {
|
for preparedDbName, preparedDB := range preparedDatabases {
|
||||||
// default roles per database
|
// default roles per database
|
||||||
if err := c.initDefaultRoles("admin", preparedDbName); err != nil {
|
if err := c.initDefaultRoles(defaultRoles, "admin", preparedDbName); err != nil {
|
||||||
|
return fmt.Errorf("could not initialize default roles for database %s: %v", preparedDbName, err)
|
||||||
|
}
|
||||||
|
if err := c.initDefaultRoles(defaultUsers, "admin", preparedDbName); err != nil {
|
||||||
return fmt.Errorf("could not initialize default roles for database %s: %v", preparedDbName, err)
|
return fmt.Errorf("could not initialize default roles for database %s: %v", preparedDbName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -799,19 +805,21 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
|
||||||
}
|
}
|
||||||
for preparedSchemaName, preparedSchema := range preparedSchemas {
|
for preparedSchemaName, preparedSchema := range preparedSchemas {
|
||||||
if preparedSchema.DefaultRoles == nil || *preparedSchema.DefaultRoles {
|
if preparedSchema.DefaultRoles == nil || *preparedSchema.DefaultRoles {
|
||||||
if err := c.initDefaultRoles(preparedDbName+"_owner", preparedDbName+"_"+preparedSchemaName); err != nil {
|
if err := c.initDefaultRoles(defaultRoles, preparedDbName+"_owner", preparedDbName+"_"+preparedSchemaName); err != nil {
|
||||||
return fmt.Errorf("could not initialize default roles for database schema %s: %v", preparedSchemaName, err)
|
return fmt.Errorf("could not initialize default roles for database schema %s: %v", preparedSchemaName, err)
|
||||||
}
|
}
|
||||||
|
if preparedSchema.DefaultUsers {
|
||||||
|
if err := c.initDefaultRoles(defaultUsers, preparedDbName+"_owner", preparedDbName+"_"+preparedSchemaName); err != nil {
|
||||||
|
return fmt.Errorf("could not initialize default users for database schema %s: %v", preparedSchemaName, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) initDefaultRoles(admin, prefix string) error {
|
func (c *Cluster) initDefaultRoles(defaultRoles map[string]string, admin, prefix string) error {
|
||||||
defaultRoles := map[string]string{
|
|
||||||
"_owner": "", "_reader": "", "_writer": "_reader",
|
|
||||||
"_owner_user": "_owner", "_reader_user": "_reader", "_writer_user": "_writer"}
|
|
||||||
|
|
||||||
for defaultRole, inherits := range defaultRoles {
|
for defaultRole, inherits := range defaultRoles {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -297,9 +297,11 @@ func (c *Cluster) execCreateDatabaseSchema(datname, schemaName, dbOwner, schemaO
|
||||||
}
|
}
|
||||||
|
|
||||||
// set default privileges for schema
|
// set default privileges for schema
|
||||||
c.execAlterSchemaDefaultPrivileges(schemaName, dbOwner, datname+"_"+schemaName)
|
|
||||||
c.execAlterSchemaDefaultPrivileges(schemaName, schemaOwner, datname)
|
c.execAlterSchemaDefaultPrivileges(schemaName, schemaOwner, datname)
|
||||||
c.execAlterSchemaDefaultPrivileges(schemaName, schemaOwner, datname+"_"+schemaName)
|
if schemaOwner != dbOwner {
|
||||||
|
c.execAlterSchemaDefaultPrivileges(schemaName, dbOwner, datname+"_"+schemaName)
|
||||||
|
c.execAlterSchemaDefaultPrivileges(schemaName, schemaOwner, datname+"_"+schemaName)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue