Skip to content

Commit

Permalink
[Fix] : Nil pointer de-reference in conversion webhook (OT-CONTAINER-…
Browse files Browse the repository at this point in the history
…KIT#615)

* fix nil ptr derefer & volume issue

Signed-off-by: Shubham Gupta <iamshubhamgupta2001@gmail.com>

* fix : nil ptr derefer error

Signed-off-by: Shubham Gupta <iamshubhamgupta2001@gmail.com>

---------

Signed-off-by: Shubham Gupta <iamshubhamgupta2001@gmail.com>
Signed-off-by: Matt Robinson <mattrobinsonsre@gmail.com>
  • Loading branch information
shubham-cmyk authored and mattrobinsonsre committed Jul 11, 2024
1 parent 3d612aa commit 02c48d1
Show file tree
Hide file tree
Showing 11 changed files with 81 additions and 41 deletions.
2 changes: 1 addition & 1 deletion api/v1beta1/common_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type ExistingPasswordSecret struct {

// Storage is the inteface to add pvc and pv support in redis
type Storage struct {
CommonAttributes common.Storage `json:",inline"`
common.Storage `json:",inline"`
}

// RedisExporter interface will have the information for redis exporter related stuff
Expand Down
25 changes: 22 additions & 3 deletions api/v1beta1/redis_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,29 @@ import (
func (src *Redis) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*redisv1beta2.Redis)

// if src == nil {
// return errors.New("source is nil")
// }
// ObjectMeta
dst.ObjectMeta = src.ObjectMeta

// KubernetesConfig
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &redisv1beta2.RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// RedisConfig
if src.Spec.RedisConfig != nil {
dst.Spec.RedisConfig = &redisv1beta2.RedisConfig{}
dst.Spec.RedisConfig.RedisConfig = src.Spec.RedisConfig.RedisConfig
}
// Storage
if src.Spec.Storage != nil {
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &redisv1beta2.Storage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// NodeSelector
if src.Spec.NodeSelector != nil {
Expand All @@ -48,14 +55,17 @@ func (src *Redis) ConvertTo(dstRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &redisv1beta2.TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &redisv1beta2.Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.LivenessProbe = &redisv1beta2.Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
Expand All @@ -80,22 +90,29 @@ func (src *Redis) ConvertTo(dstRaw conversion.Hub) error {
func (dst *Redis) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*redisv1beta2.Redis)

// if src == nil {
// return errors.New("source is nil")
// }
// ObjectMeta
dst.ObjectMeta = src.ObjectMeta

// KubernetesConfig
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// RedisConfig
if src.Spec.RedisConfig != nil {
dst.Spec.RedisConfig = &RedisConfig{}
dst.Spec.RedisConfig.RedisConfig = src.Spec.RedisConfig.RedisConfig
}
// Storage
if src.Spec.Storage != nil {
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &Storage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// NodeSelector
if src.Spec.NodeSelector != nil {
Expand All @@ -119,14 +136,17 @@ func (dst *Redis) ConvertFrom(srcRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.LivenessProbe = &Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
Expand All @@ -139,7 +159,6 @@ func (dst *Redis) ConvertFrom(srcRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
Expand Down
22 changes: 14 additions & 8 deletions api/v1beta1/rediscluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

// ConvertTo converts this RedisCluster to the Hub version (v1beta2).
// ConvertTo converts this RedisCluster to the Hub version (v1beta2) from the current version (v1beta1)

func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*redisv1beta2.RedisCluster)

Expand All @@ -28,12 +29,15 @@ func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error {
dst.Spec.RedisFollower.CommonAttributes = src.Spec.RedisFollower.CommonAttributes
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &redisv1beta2.RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// Storage
// Storage-v1bet1 >> ClusterStorage-v1beta2
if src.Spec.Storage != nil {
// Note : Add the Check the creation of node-conf later
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &redisv1beta2.ClusterStorage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// SecurityContext >> PodSecurityContext
if src.Spec.SecurityContext != nil {
Expand All @@ -49,6 +53,7 @@ func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &redisv1beta2.TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// Sidecars
Expand All @@ -61,7 +66,6 @@ func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
Expand All @@ -70,7 +74,6 @@ func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error {
if src.Spec.PersistenceEnabled != nil {
dst.Spec.PersistenceEnabled = src.Spec.PersistenceEnabled
}

return nil
}

Expand All @@ -97,11 +100,14 @@ func (dst *RedisCluster) ConvertFrom(srcRaw conversion.Hub) error {
dst.Spec.RedisFollower.CommonAttributes = src.Spec.RedisFollower.CommonAttributes
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// Storage
// ClusterStorage(v1beta2) >> Storage(v1beta1)
if src.Spec.Storage != nil {
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &Storage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// PodSecurityContext >> SecurityContext
if src.Spec.PodSecurityContext != nil {
Expand All @@ -117,6 +123,7 @@ func (dst *RedisCluster) ConvertFrom(srcRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// Sidecars
Expand All @@ -129,7 +136,6 @@ func (dst *RedisCluster) ConvertFrom(srcRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
Expand Down
21 changes: 16 additions & 5 deletions api/v1beta1/redisreplication_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,19 @@ func (src *RedisReplication) ConvertTo(dstRaw conversion.Hub) error {
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &redisv1beta2.RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// RedisConfig
if src.Spec.RedisConfig != nil {
dst.Spec.RedisConfig = &redisv1beta2.RedisConfig{}
dst.Spec.RedisConfig.RedisConfig = src.Spec.RedisConfig.RedisConfig
}
// Storage
if src.Spec.Storage != nil {
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &redisv1beta2.Storage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// NodeSelector
if src.Spec.NodeSelector != nil {
Expand All @@ -50,18 +54,20 @@ func (src *RedisReplication) ConvertTo(dstRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &redisv1beta2.TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &redisv1beta2.Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.LivenessProbe = &redisv1beta2.Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
// Sidecars
if src.Spec.Sidecars != nil {
var sidecars []redisv1beta2.Sidecar
for _, sidecar := range *src.Spec.Sidecars {
Expand All @@ -75,7 +81,6 @@ func (src *RedisReplication) ConvertTo(dstRaw conversion.Hub) error {
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
}

return nil
}

Expand All @@ -92,15 +97,19 @@ func (dst *RedisReplication) ConvertFrom(srcRaw conversion.Hub) error {
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisExporter
if src.Spec.RedisExporter != nil {
dst.Spec.RedisExporter = &RedisExporter{}
dst.Spec.RedisExporter.RedisExporter = src.Spec.RedisExporter.RedisExporter
}
// RedisConfig
if src.Spec.RedisConfig != nil {
dst.Spec.RedisConfig = &RedisConfig{}
dst.Spec.RedisConfig.RedisConfig = src.Spec.RedisConfig.RedisConfig
}
// Storage
if src.Spec.Storage != nil {
dst.Spec.Storage.CommonAttributes = src.Spec.Storage.CommonAttributes
dst.Spec.Storage = &Storage{}
dst.Spec.Storage.VolumeClaimTemplate = src.Spec.Storage.VolumeClaimTemplate
dst.Spec.Storage.VolumeMount = src.Spec.Storage.VolumeMount
}
// NodeSelector
if src.Spec.NodeSelector != nil {
Expand All @@ -124,14 +133,17 @@ func (dst *RedisReplication) ConvertFrom(srcRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.ReadinessProbe = &Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
Expand All @@ -144,7 +156,6 @@ func (dst *RedisReplication) ConvertFrom(srcRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
Expand Down
12 changes: 8 additions & 4 deletions api/v1beta1/redissentinel_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ func (src *RedisSentinel) ConvertTo(dstRaw conversion.Hub) error {
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisSentinelConfig
if src.Spec.RedisSentinelConfig != nil {
dst.Spec.RedisSentinelConfig = &redisv1beta2.RedisSentinelConfig{}
dst.Spec.RedisSentinelConfig.RedisSentinelConfig = src.Spec.RedisSentinelConfig.RedisSentinelConfig
}
// NodeSelector
Expand All @@ -42,18 +43,20 @@ func (src *RedisSentinel) ConvertTo(dstRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &redisv1beta2.TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &redisv1beta2.Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.ReadinessProbe = &redisv1beta2.Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
// Sidecars
if src.Spec.Sidecars != nil {
var sidecars []redisv1beta2.Sidecar
for _, sidecar := range *src.Spec.Sidecars {
Expand All @@ -63,12 +66,10 @@ func (src *RedisSentinel) ConvertTo(dstRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
}

return nil
}

Expand All @@ -85,6 +86,7 @@ func (dst *RedisSentinel) ConvertFrom(srcRaw conversion.Hub) error {
dst.Spec.KubernetesConfig.KubernetesConfig = src.Spec.KubernetesConfig.KubernetesConfig
// RedisSentinelConfig
if src.Spec.RedisSentinelConfig != nil {
dst.Spec.RedisSentinelConfig = &RedisSentinelConfig{}
dst.Spec.RedisSentinelConfig.RedisSentinelConfig = src.Spec.RedisSentinelConfig.RedisSentinelConfig
}
// NodeSelector
Expand All @@ -109,14 +111,17 @@ func (dst *RedisSentinel) ConvertFrom(srcRaw conversion.Hub) error {
}
// TLS
if src.Spec.TLS != nil {
dst.Spec.TLS = &TLSConfig{}
dst.Spec.TLS.TLSConfig = src.Spec.TLS.TLSConfig
}
// ReadinessProbe
if src.Spec.ReadinessProbe != nil {
dst.Spec.ReadinessProbe = &Probe{}
dst.Spec.ReadinessProbe.Probe = src.Spec.ReadinessProbe.Probe
}
// LivenessProbe
if src.Spec.LivenessProbe != nil {
dst.Spec.ReadinessProbe = &Probe{}
dst.Spec.LivenessProbe.Probe = src.Spec.LivenessProbe.Probe
}
// Sidecars
Expand All @@ -129,7 +134,6 @@ func (dst *RedisSentinel) ConvertFrom(srcRaw conversion.Hub) error {
}
dst.Spec.Sidecars = &sidecars
}

// ServiceAccountName
if src.Spec.ServiceAccountName != nil {
dst.Spec.ServiceAccountName = src.Spec.ServiceAccountName
Expand Down
2 changes: 1 addition & 1 deletion api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 02c48d1

Please sign in to comment.