@@ -29,6 +29,7 @@ import (
2929 "github.com/percona/percona-server-mysql-operator/pkg/version"
3030
3131 "github.com/pkg/errors"
32+ appsv1 "k8s.io/api/apps/v1"
3233 corev1 "k8s.io/api/core/v1"
3334 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3435 "k8s.io/apimachinery/pkg/util/intstr"
@@ -41,23 +42,24 @@ import (
4142
4243// PerconaServerMySQLSpec defines the desired state of PerconaServerMySQL
4344type PerconaServerMySQLSpec struct {
44- CRVersion string `json:"crVersion,omitempty"`
45- Pause bool `json:"pause,omitempty"`
46- SecretsName string `json:"secretsName,omitempty"`
47- SSLSecretName string `json:"sslSecretName,omitempty"`
48- SSLInternalSecretName string `json:"sslInternalSecretName,omitempty"`
49- AllowUnsafeConfig bool `json:"allowUnsafeConfigurations,omitempty"`
50- InitImage string `json:"initImage,omitempty"`
51- IgnoreAnnotations []string `json:"ignoreAnnotations,omitempty"`
52- IgnoreLabels []string `json:"ignoreLabels,omitempty"`
53- MySQL MySQLSpec `json:"mysql,omitempty"`
54- Orchestrator OrchestratorSpec `json:"orchestrator,omitempty"`
55- PMM * PMMSpec `json:"pmm,omitempty"`
56- Backup * BackupSpec `json:"backup,omitempty"`
57- Proxy ProxySpec `json:"proxy,omitempty"`
58- TLS * TLSSpec `json:"tls,omitempty"`
59- Toolkit * ToolkitSpec `json:"toolkit,omitempty"`
60- UpgradeOptions UpgradeOptions `json:"upgradeOptions,omitempty"`
45+ CRVersion string `json:"crVersion,omitempty"`
46+ Pause bool `json:"pause,omitempty"`
47+ SecretsName string `json:"secretsName,omitempty"`
48+ SSLSecretName string `json:"sslSecretName,omitempty"`
49+ SSLInternalSecretName string `json:"sslInternalSecretName,omitempty"`
50+ AllowUnsafeConfig bool `json:"allowUnsafeConfigurations,omitempty"`
51+ InitImage string `json:"initImage,omitempty"`
52+ IgnoreAnnotations []string `json:"ignoreAnnotations,omitempty"`
53+ IgnoreLabels []string `json:"ignoreLabels,omitempty"`
54+ MySQL MySQLSpec `json:"mysql,omitempty"`
55+ Orchestrator OrchestratorSpec `json:"orchestrator,omitempty"`
56+ PMM * PMMSpec `json:"pmm,omitempty"`
57+ Backup * BackupSpec `json:"backup,omitempty"`
58+ Proxy ProxySpec `json:"proxy,omitempty"`
59+ TLS * TLSSpec `json:"tls,omitempty"`
60+ Toolkit * ToolkitSpec `json:"toolkit,omitempty"`
61+ UpgradeOptions UpgradeOptions `json:"upgradeOptions,omitempty"`
62+ UpdateStrategy appsv1.StatefulSetUpdateStrategyType `json:"updateStrategy,omitempty"`
6163}
6264
6365type TLSSpec struct {
@@ -674,6 +676,12 @@ func (cr *PerconaServerMySQL) CheckNSetDefaults(ctx context.Context, serverVersi
674676 cr .Spec .SSLSecretName = cr .Name + "-ssl"
675677 }
676678
679+ if cr .Spec .UpdateStrategy == SmartUpdateStatefulSetStrategyType &&
680+ ! cr .HAProxyEnabled () &&
681+ ! cr .RouterEnabled () {
682+ return errors .Errorf ("MySQL Router or HAProxy should be enabled if SmartUpdate set" )
683+ }
684+
677685 return nil
678686}
679687
@@ -893,6 +901,9 @@ func init() {
893901 SchemeBuilder .Register (& PerconaServerMySQL {}, & PerconaServerMySQLList {})
894902}
895903
904+ // SmartUpdateStatefulSetStrategyType
905+ const SmartUpdateStatefulSetStrategyType appsv1.StatefulSetUpdateStrategyType = "SmartUpdate"
906+
896907type UpgradeOptions struct {
897908 VersionServiceEndpoint string `json:"versionServiceEndpoint,omitempty"`
898909 Apply string `json:"apply,omitempty"`
0 commit comments