new default values for user and role definition

This commit is contained in:
Felix Kunde 2020-08-07 17:41:14 +02:00
parent d68ef1a20e
commit 5d7c0959dc
8 changed files with 48 additions and 7 deletions

View File

@ -138,7 +138,6 @@ spec:
type: object type: object
required: required:
- secretname - secretname
- userkey
- passwordkey - passwordkey
properties: properties:
secretname: secretname:
@ -149,6 +148,10 @@ spec:
type: string type: string
rolekey: rolekey:
type: string type: string
defaultuservalue:
type: string
defaultrolevalue:
type: string
details: details:
type: string type: string
template: template:

View File

@ -134,7 +134,6 @@ spec:
type: object type: object
required: required:
- secretname - secretname
- userkey
- passwordkey - passwordkey
properties: properties:
secretname: secretname:
@ -145,6 +144,10 @@ spec:
type: string type: string
rolekey: rolekey:
type: string type: string
defaultuservalue:
type: string
defaultrolevalue:
type: string
details: details:
type: string type: string
template: template:

View File

@ -916,7 +916,7 @@ var OperatorConfigCRDResourceValidation = apiextv1beta1.CustomResourceValidation
Items: &apiextv1beta1.JSONSchemaPropsOrArray{ Items: &apiextv1beta1.JSONSchemaPropsOrArray{
Schema: &apiextv1beta1.JSONSchemaProps{ Schema: &apiextv1beta1.JSONSchemaProps{
Type: "object", Type: "object",
Required: []string{"secretname", "userkey", "passwordkey"}, Required: []string{"secretname", "passwordkey"},
Properties: map[string]apiextv1beta1.JSONSchemaProps{ Properties: map[string]apiextv1beta1.JSONSchemaProps{
"secretname": { "secretname": {
Type: "string", Type: "string",
@ -930,6 +930,12 @@ var OperatorConfigCRDResourceValidation = apiextv1beta1.CustomResourceValidation
"rolekey": { "rolekey": {
Type: "string", Type: "string",
}, },
"defaultuservalue": {
Type: "string",
},
"defaultrolevalue": {
Type: "string",
},
"details": { "details": {
Type: "string", Type: "string",
}, },

View File

@ -207,7 +207,7 @@ func (c *Cluster) deleteConnectionPooler() (err error) {
serviceName = service.Name serviceName = service.Name
} }
// set delete propagation policy to foreground, so that all the dependant // set delete propagation policy to foreground, so that all the dependent
// will be deleted. // will be deleted.
err = c.KubeClient. err = c.KubeClient.
Services(c.Namespace). Services(c.Namespace).

View File

@ -500,6 +500,7 @@ func (c *Cluster) syncSecrets() error {
c.logger.Warningf("secret %q does not contain the role %q", secretSpec.Name, secretUsername) c.logger.Warningf("secret %q does not contain the role %q", secretSpec.Name, secretUsername)
continue continue
} }
c.Secrets[secret.UID] = secret
c.logger.Debugf("secret %q already exists, fetching its password", util.NameFromMeta(secret.ObjectMeta)) c.logger.Debugf("secret %q already exists, fetching its password", util.NameFromMeta(secret.ObjectMeta))
if secretUsername == c.systemUsers[constants.SuperuserKeyName].Name { if secretUsername == c.systemUsers[constants.SuperuserKeyName].Name {
secretUsername = constants.SuperuserKeyName secretUsername = constants.SuperuserKeyName

View File

@ -15,6 +15,7 @@ import (
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
"github.com/zalando/postgres-operator/pkg/cluster" "github.com/zalando/postgres-operator/pkg/cluster"
"github.com/zalando/postgres-operator/pkg/spec" "github.com/zalando/postgres-operator/pkg/spec"
"github.com/zalando/postgres-operator/pkg/util"
"github.com/zalando/postgres-operator/pkg/util/config" "github.com/zalando/postgres-operator/pkg/util/config"
"github.com/zalando/postgres-operator/pkg/util/k8sutil" "github.com/zalando/postgres-operator/pkg/util/k8sutil"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
@ -159,13 +160,17 @@ func (c *Controller) getInfrastructureRoleDefinitions() []*config.Infrastructure
roleDef.PasswordKey = value roleDef.PasswordKey = value
case "rolekey": case "rolekey":
roleDef.RoleKey = value roleDef.RoleKey = value
case "defaultuservalue":
roleDef.DefaultUserValue = value
case "defaultrolevalue":
roleDef.DefaultRoleValue = value
default: default:
c.logger.Warningf("Role description is not known: %s", properties) c.logger.Warningf("Role description is not known: %s", properties)
} }
} }
if roleDef.SecretName != emptyName && if roleDef.SecretName != emptyName &&
roleDef.UserKey != "" && (roleDef.UserKey != "" || roleDef.DefaultUserValue != "") &&
roleDef.PasswordKey != "" { roleDef.PasswordKey != "" {
rolesDefs = append(rolesDefs, &roleDef) rolesDefs = append(rolesDefs, &roleDef)
} }
@ -328,9 +333,10 @@ func (c *Controller) getInfrastructureRole(
return nil, fmt.Errorf("could not decode yaml role: %v", err) return nil, fmt.Errorf("could not decode yaml role: %v", err)
} }
} else { } else {
roleDescr.Name = string(secretData[infraRole.UserKey]) roleDescr.Name = util.Coalesce(string(secretData[infraRole.UserKey]), infraRole.DefaultUserValue)
roleDescr.Password = string(secretData[infraRole.PasswordKey]) roleDescr.Password = string(secretData[infraRole.PasswordKey])
roleDescr.MemberOf = append(roleDescr.MemberOf, string(secretData[infraRole.RoleKey])) roleDescr.MemberOf = append(roleDescr.MemberOf,
util.Coalesce(string(secretData[infraRole.RoleKey]), infraRole.DefaultRoleValue))
} }
if roleDescr.Valid() { if roleDescr.Valid() {

View File

@ -326,6 +326,25 @@ func TestInfrastructureRoleDefinitions(t *testing.T) {
}, },
}, },
}, },
// new configmap format with defaultRoleValue
{
[]*config.InfrastructureRole{},
spec.NamespacedName{},
"secretname: infrastructureroles-new-test, userkey: test-user, passwordkey: test-password, defaultrolevalue: test-role",
[]*config.InfrastructureRole{
&config.InfrastructureRole{
SecretName: spec.NamespacedName{
Namespace: v1.NamespaceDefault,
Name: testInfrastructureRolesNewSecretName,
},
UserKey: "test-user",
PasswordKey: "test-password",
RoleKey: "",
DefaultRoleValue: "test-role",
Template: false,
},
},
},
// only old CRD and configmap format // only old CRD and configmap format
{ {
[]*config.InfrastructureRole{}, []*config.InfrastructureRole{},

View File

@ -61,6 +61,9 @@ type InfrastructureRole struct {
PasswordKey string PasswordKey string
RoleKey string RoleKey string
DefaultUserValue string
DefaultRoleValue string
// This field point out the detailed yaml definition of the role, if exists // This field point out the detailed yaml definition of the role, if exists
Details string Details string