diff --git a/pkg/apis/psmdb/v1/psmdb_defaults.go b/pkg/apis/psmdb/v1/psmdb_defaults.go index 326dfc27e..5259b1f3c 100644 --- a/pkg/apis/psmdb/v1/psmdb_defaults.go +++ b/pkg/apis/psmdb/v1/psmdb_defaults.go @@ -633,6 +633,21 @@ func (cr *PerconaServerMongoDB) CheckNSetDefaults(ctx context.Context, platform return nil } +func (rs *ReplsetSpec) IsEncryptionEnabled() (bool, error) { + enabled, err := rs.Configuration.isEncryptionEnabled() + if err != nil { + return false, errors.Wrap(err, "failed to parse replset configuration") + } + + if enabled == nil { + if rs.Storage.Engine == StorageEngineInMemory { + return false, nil // disabled for inMemory engine by default + } + return true, nil // true by default + } + return *enabled, nil +} + // SetDefaults set default options for the replset func (rs *ReplsetSpec) SetDefaults(platform version.Platform, cr *PerconaServerMongoDB, log logr.Logger) error { if rs.VolumeSpec == nil { @@ -734,6 +749,16 @@ func (rs *ReplsetSpec) SetDefaults(platform version.Platform, cr *PerconaServerM } } + if rs.Storage != nil && rs.Storage.Engine == StorageEngineInMemory { + encryptionEnabled, err := rs.IsEncryptionEnabled() + if err != nil { + return errors.Wrap(err, "failed to parse replset configuration") + } + if encryptionEnabled { + return errors.New("inMemory storage engine doesn't support encryption") + } + } + return nil } diff --git a/pkg/apis/psmdb/v1/psmdb_types.go b/pkg/apis/psmdb/v1/psmdb_types.go index f36c9e519..24e484bf0 100644 --- a/pkg/apis/psmdb/v1/psmdb_types.go +++ b/pkg/apis/psmdb/v1/psmdb_types.go @@ -558,8 +558,8 @@ func (conf MongoConfiguration) GetTLSMode() (string, error) { return mode, nil } -// IsEncryptionEnabled returns nil if "enableEncryption" field is not specified or the pointer to the value of this field -func (conf MongoConfiguration) IsEncryptionEnabled() (*bool, error) { +// isEncryptionEnabled returns nil if "enableEncryption" field is not specified or the pointer to the value of this field +func (conf MongoConfiguration) isEncryptionEnabled() (*bool, error) { m, err := conf.GetOptions("security") if err != nil || m == nil { return nil, err diff --git a/pkg/psmdb/container.go b/pkg/psmdb/container.go index 27ebc11e6..63909d613 100644 --- a/pkg/psmdb/container.go +++ b/pkg/psmdb/container.go @@ -66,7 +66,7 @@ func container(ctx context.Context, cr *api.PerconaServerMongoDB, replset *api.R }...) } - encryptionEnabled, err := isEncryptionEnabled(cr, replset) + encryptionEnabled, err := replset.IsEncryptionEnabled() if err != nil { return corev1.Container{}, err } @@ -214,7 +214,7 @@ func containerArgs(ctx context.Context, cr *api.PerconaServerMongoDB, replset *a args = append(args, "--shardsvr") } - encryptionEnabled, err := isEncryptionEnabled(cr, replset) + encryptionEnabled, err := replset.IsEncryptionEnabled() if err != nil { logf.FromContext(ctx).Error(err, "failed to check if mongo encryption enabled") } diff --git a/pkg/psmdb/statefulset.go b/pkg/psmdb/statefulset.go index 7dd83d35d..e8d13e17d 100644 --- a/pkg/psmdb/statefulset.go +++ b/pkg/psmdb/statefulset.go @@ -116,7 +116,7 @@ func StatefulSpec(ctx context.Context, cr *api.PerconaServerMongoDB, replset *ap VolumeSource: customConf.Type.VolumeSource(configName), }) } - encryptionEnabled, err := isEncryptionEnabled(cr, replset) + encryptionEnabled, err := replset.IsEncryptionEnabled() if err != nil { return appsv1.StatefulSetSpec{}, errors.Wrap(err, "failed to check if encryption is enabled") } @@ -580,14 +580,3 @@ func PodTopologySpreadConstraints(cr *api.PerconaServerMongoDB, tscs []corev1.To } return result } - -func isEncryptionEnabled(cr *api.PerconaServerMongoDB, replset *api.ReplsetSpec) (bool, error) { - enabled, err := replset.Configuration.IsEncryptionEnabled() - if err != nil { - return false, errors.Wrap(err, "failed to parse replset configuration") - } - if enabled == nil { - return true, nil // true by default - } - return *enabled, nil -}