Skip to content

Commit

Permalink
Merge pull request #432 from yikuaibro/cnpg
Browse files Browse the repository at this point in the history
feat: add cnpg builder cluster parameters
  • Loading branch information
mlycore authored Jul 10, 2023
2 parents 58b08d1 + 4f2d9bd commit 9634fa7
Showing 1 changed file with 225 additions and 4 deletions.
229 changes: 225 additions & 4 deletions shardingsphere-operator/pkg/kubernetes/cloudnative-pg/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,109 @@ import (
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/api/v1alpha1"

cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
)

// nolint:gocognit
// NewCluster returns a new Cluster
func NewCluster(sn *v1alpha1.StorageNode, sp *v1alpha1.StorageProvider) *cnpgv1.Cluster {
builder := NewClusterBuilder(sn.GetObjectMeta(), sn.GetObjectKind().GroupVersionKind())
builder.SetName(sn.Name)
builder.SetNamespace(sn.Namespace)

if len(sp.Spec.Parameters["description"]) > 0 {
builder.SetDescription(sp.Spec.Parameters["description"])
}

if len(sp.Spec.Parameters["imageName"]) > 0 {
builder.SetImageName(sp.Spec.Parameters["imageName"])
}

if len(sp.Spec.Parameters["imagePullPolicy"]) > 0 {
builder.SetImagePullPolicy(sp.Spec.Parameters["imagePullPolicy"])
}

if len(sp.Spec.Parameters["postgresUID"]) > 0 {
pUID, _ := strconv.ParseInt(sp.Spec.Parameters["postgresUID"], 10, 64)
builder.SetPostgresUID(pUID)
}

if len(sp.Spec.Parameters["postgresGID"]) > 0 {
pGID, _ := strconv.ParseInt(sp.Spec.Parameters["postgresGID"], 10, 64)
builder.SetPostgresGID(pGID)
}

if len(sp.Spec.Parameters["minSyncReplicas"]) > 0 {
minSyncReplicas, _ := strconv.Atoi(sp.Spec.Parameters["minSyncReplicas"])
builder.SetMinSyncReplicas(minSyncReplicas)
}

if len(sp.Spec.Parameters["maxSyncReplicas"]) > 0 {
maxSyncReplicas, _ := strconv.Atoi(sp.Spec.Parameters["maxSyncReplicas"])
builder.SetMaxSyncReplicas(maxSyncReplicas)
}

if len(sp.Spec.Parameters["replicaCluster.enabled"]) > 0 {
enabledrc, _ := strconv.ParseBool(sp.Spec.Parameters["replicaCluster.enabled"])
builder.SetReplicaClusterEnabled(enabledrc)
}

if len(sp.Spec.Parameters["replicaCluster.source"]) > 0 {
builder.SetReplicaClusterSource(sp.Spec.Parameters["replicaCluster.source"])
}

if len(sp.Spec.Parameters["enableSuperuserAccess"]) > 0 {
enablesa, _ := strconv.ParseBool(sp.Spec.Parameters["enableSuperuserAccess"])
builder.SetEnableSuperuserAccess(&enablesa)
}

if len(sp.Spec.Parameters["superuserSecret"]) > 0 {
builder.SetSuperuserSecret(sp.Spec.Parameters["superuserSecret"])
}

builder.SetCertificates(
sp.Spec.Parameters["certificates.serverCASecret"],
sp.Spec.Parameters["certificates.serverTLSSecret"],
sp.Spec.Parameters["certificates.replicationTLSSecret"],
sp.Spec.Parameters["certificates.clientCASecret"],
[]string{sp.Spec.Parameters["certificates.ServerAltDNSNames"]})

if len(sp.Spec.Parameters["maxStartDelay"]) > 0 {
maxStartDelay, _ := strconv.ParseInt(sp.Spec.Parameters["maxStartDelay"], 10, 32)
builder.SetMaxStartDelay(int32(maxStartDelay))
}

if len(sp.Spec.Parameters["maxStopDelay"]) > 0 {
maxStopDelay, _ := strconv.ParseInt(sp.Spec.Parameters["maxStopDelay"], 10, 32)
builder.SetMaxStopDelay(int32(maxStopDelay))
}

if len(sp.Spec.Parameters["maxSwitchoverDelay"]) > 0 {
maxSwitchoverDelay, _ := strconv.ParseInt(sp.Spec.Parameters["maxSwitchoverDelay"], 10, 32)
builder.SetMaxSwitchoverDelay(int32(maxSwitchoverDelay))
}

if len(sp.Spec.Parameters["failoverDelay"]) > 0 {
failoverDelay, _ := strconv.ParseInt(sp.Spec.Parameters["failoverDelay"], 10, 32)
builder.SetFailoverDelay(int32(failoverDelay))
}

if len(sp.Spec.Parameters["primaryUpdateStrategy"]) > 0 {
builder.SetPrimaryUpdateStrategy(sp.Spec.Parameters["primaryUpdateStrategy"])
}

if len(sp.Spec.Parameters["primaryUpdateMethod"]) > 0 {
builder.SetPrimaryUpdateMethod(sp.Spec.Parameters["primaryUpdateMethod"])
}

if len(sp.Spec.Parameters["backup.retentionPolicy"]) > 0 {
builder.SetBackupRetentionPolicy(sp.Spec.Parameters["backup.retentionPolicy"])
}

if len(sp.Spec.Parameters["backup.target"]) > 0 {
builder.SetBackupTarget(cnpgv1.BackupTarget(sp.Spec.Parameters["backup.target"]))
builder.SetBackupTarget(sp.Spec.Parameters["backup.target"])
}

if len(sp.Spec.Parameters["instances"]) > 0 {
Expand All @@ -54,6 +137,10 @@ func NewCluster(sn *v1alpha1.StorageNode, sp *v1alpha1.StorageProvider) *cnpgv1.
builder.SetStorageSize(sp.Spec.Parameters["storage.size"])
}

if len(sp.Spec.Parameters["logLevel"]) > 0 {
builder.SetLogLevel(sp.Spec.Parameters["logLevel"])
}

return builder.Build()
}

Expand All @@ -67,11 +154,29 @@ func NewClusterBuilder(meta metav1.Object, gvk schema.GroupVersionKind) ClusterB
type ClusterBuilder interface {
SetName(name string) ClusterBuilder
SetNamespace(namespace string) ClusterBuilder
SetDescription(description string) ClusterBuilder
SetInstances(n int) ClusterBuilder
SetImageName(name string) ClusterBuilder
SetImagePullPolicy(p string) ClusterBuilder
SetPostgresUID(u int64) ClusterBuilder
SetPostgresGID(g int64) ClusterBuilder
SetMinSyncReplicas(n int) ClusterBuilder
SetMaxSyncReplicas(n int) ClusterBuilder
SetReplicaClusterEnabled(e bool) ClusterBuilder
SetReplicaClusterSource(s string) ClusterBuilder
SetSuperuserSecret(s string) ClusterBuilder
SetEnableSuperuserAccess(e *bool) ClusterBuilder
SetCertificates(serverCASecret, serverTLSSecret, replicationTLSSecret, clientCASecret string, serverAltDNSNames []string) ClusterBuilder
SetStorageSize(s string) ClusterBuilder
SetMaxStartDelay(d int32) ClusterBuilder
SetMaxStopDelay(d int32) ClusterBuilder
SetMaxSwitchoverDelay(d int32) ClusterBuilder
SetFailoverDelay(d int32) ClusterBuilder
SetPrimaryUpdateStrategy(s string) ClusterBuilder
SetPrimaryUpdateMethod(m string) ClusterBuilder
SetBackupRetentionPolicy(r string) ClusterBuilder
SetBackupTarget(t cnpgv1.BackupTarget) ClusterBuilder
SetBackupTarget(t string) ClusterBuilder
SetLogLevel(l string) ClusterBuilder
Build() *cnpgv1.Cluster
}

Expand All @@ -91,6 +196,30 @@ func (b *clusterBuilder) SetNamespace(namespace string) ClusterBuilder {
return b
}

// SetDescription sets the description of the cluster
func (b *clusterBuilder) SetDescription(description string) ClusterBuilder {
b.cluster.Spec.Description = description
return b
}

// SetImagePullPolicy sets the image pull policy, default is IfNotPresent
func (b *clusterBuilder) SetImagePullPolicy(p string) ClusterBuilder {
b.cluster.Spec.ImagePullPolicy = corev1.PullPolicy(p)
return b
}

// SetPostgresUID sets the UID of the `postgres` user inside the image, defaults to `26`
func (b *clusterBuilder) SetPostgresUID(u int64) ClusterBuilder {
b.cluster.Spec.PostgresUID = u
return b
}

// SetPostgresGID sets the GID of the `postgres` user inside the image, defaults to `26`
func (b *clusterBuilder) SetPostgresGID(g int64) ClusterBuilder {
b.cluster.Spec.PostgresGID = g
return b
}

// SetInstances sets the number of instances
func (b *clusterBuilder) SetInstances(n int) ClusterBuilder {
b.cluster.Spec.Instances = n
Expand All @@ -103,21 +232,113 @@ func (b *clusterBuilder) SetImageName(name string) ClusterBuilder {
return b
}

// SetMinSyncReplicas sets the minimum number of synchronous replicas
func (b *clusterBuilder) SetMinSyncReplicas(n int) ClusterBuilder {
b.cluster.Spec.MinSyncReplicas = n
return b
}

// SetMaxSyncReplicas sets the maximum number of synchronous replicas
func (b *clusterBuilder) SetMaxSyncReplicas(n int) ClusterBuilder {
b.cluster.Spec.MaxSyncReplicas = n
return b
}

// SetReplicaClusterEnabled sets whether this cluster is a replica of an existing cluster
func (b *clusterBuilder) SetReplicaClusterEnabled(e bool) ClusterBuilder {
b.cluster.Spec.ReplicaCluster.Enabled = e
return b
}

// SetReplicaClusterSource sets the source cluster of this replica
func (b *clusterBuilder) SetReplicaClusterSource(s string) ClusterBuilder {
b.cluster.Spec.ReplicaCluster.Source = s
return b
}

// SetSuperuserSecret sets the secret containing the superuser password
func (b *clusterBuilder) SetSuperuserSecret(s string) ClusterBuilder {
b.cluster.Spec.SuperuserSecret.Name = s
return b
}

// SetEnableSuperuserAccess sets whether superuser access is enabled
func (b *clusterBuilder) SetEnableSuperuserAccess(e *bool) ClusterBuilder {
b.cluster.Spec.EnableSuperuserAccess = e
return b
}

// SetCertificates sets the configuration for the CA and related certificates
func (b *clusterBuilder) SetCertificates(serverCASecret, serverTLSSecret, replicationTLSSecret, clientCASecret string, serverAltDNSNames []string) ClusterBuilder {
b.cluster.Spec.Certificates.ServerCASecret = serverCASecret
b.cluster.Spec.Certificates.ServerTLSSecret = serverTLSSecret
b.cluster.Spec.Certificates.ReplicationTLSSecret = replicationTLSSecret
b.cluster.Spec.Certificates.ClientCASecret = clientCASecret
b.cluster.Spec.Certificates.ServerAltDNSNames = serverAltDNSNames
return b
}

// SetStorageSize sets the storage size of the cluster
func (b *clusterBuilder) SetStorageSize(s string) ClusterBuilder {
b.cluster.Spec.StorageConfiguration.Size = s
return b
}

// SetMaxStartDelay sets the time in seconds that is allowed for a PostgreSQL instance to
// successfully start up (default 30)
func (b *clusterBuilder) SetMaxStartDelay(d int32) ClusterBuilder {
b.cluster.Spec.MaxStartDelay = d
return b
}

// SetMaxStopDelay sets the time in seconds that is allowed for a PostgreSQL instance to
// gracefully shutdown (default 30)
func (b *clusterBuilder) SetMaxStopDelay(d int32) ClusterBuilder {
b.cluster.Spec.MaxStopDelay = d
return b
}

// SetMaxSwitchoverDelay sets the time in seconds that is allowed for a primary PostgreSQL instance
// to gracefully shutdown during a switchover
func (b *clusterBuilder) SetMaxSwitchoverDelay(d int32) ClusterBuilder {
b.cluster.Spec.MaxSwitchoverDelay = d
return b
}

// SetFailoverDelay sets the amount of time (in seconds) to wait before triggering a failover after
// the primary PostgreSQL instance in the cluster was detected to be unhealthy
func (b *clusterBuilder) SetFailoverDelay(d int32) ClusterBuilder {
b.cluster.Spec.FailoverDelay = d
return b
}

// SetPrimaryUpdateStrategy sets the primary update strategy of the cluster
func (b *clusterBuilder) SetPrimaryUpdateStrategy(s string) ClusterBuilder {
b.cluster.Spec.PrimaryUpdateStrategy = cnpgv1.PrimaryUpdateStrategy(s)
return b
}

// SetPrimaryUpdateMethod sets the primary update method of the cluster
func (b *clusterBuilder) SetPrimaryUpdateMethod(m string) ClusterBuilder {
b.cluster.Spec.PrimaryUpdateMethod = cnpgv1.PrimaryUpdateMethod(m)
return b
}

// SetBackupRetentionPolicy sets the backup retention policy of the cluster
func (b *clusterBuilder) SetBackupRetentionPolicy(r string) ClusterBuilder {
b.cluster.Spec.Backup.RetentionPolicy = r
return b
}

// SetBackupTarget sets the backup target of the cluster
func (b *clusterBuilder) SetBackupTarget(t cnpgv1.BackupTarget) ClusterBuilder {
b.cluster.Spec.Backup.Target = t
func (b *clusterBuilder) SetBackupTarget(t string) ClusterBuilder {
b.cluster.Spec.Backup.Target = cnpgv1.BackupTarget(t)
return b
}

// SetLogLevel sets the instances' log level
func (b *clusterBuilder) SetLogLevel(l string) ClusterBuilder {
b.cluster.Spec.LogLevel = l
return b
}

Expand Down

0 comments on commit 9634fa7

Please sign in to comment.