From 831f35aefc925d4800cc7a02d4823a492833a044 Mon Sep 17 00:00:00 2001
From: Max Englander Images are not customizable by users at the keyspace level because version
-skew across the cluster is discouraged except during rolling updates,
-in which case this field is automatically managed by the VitessCluster
-controller that owns this VitessKeyspace. Images are inherited from the VitessCluster spec, unless the user has
+specified keyspace-level overrides. Version skew across the cluster is
+discouraged except during rolling updates, in which case this field is
+automatically managed by the VitessCluster controller that owns this
+VitessKeyspace.
(Appears on:
VitessKeyspaceSpec,
+VitessKeyspaceTemplate,
VitessShardSpec)
@@ -5557,10 +5559,11 @@ Images are not customizable by users at the keyspace level because version
-skew across the cluster is discouraged except during rolling updates,
-in which case this field is automatically managed by the VitessCluster
-controller that owns this VitessKeyspace. Images are inherited from the VitessCluster spec, unless the user has
+specified keyspace-level overrides. Version skew across the cluster is
+discouraged except during rolling updates, in which case this field is
+automatically managed by the VitessCluster controller that owns this
+VitessKeyspace. Annotations can optionally be used to attach custom annotations to the VitessKeyspace object. Users are encouraged to let the VitessCluster controller automatically
+propagate image changes from the VitessCluster to the VitessKeyspace
+via rolling updates. For special cases, users may specify per-VitessKeyspace images. An
+example: migrating from MySQL 5.7 to MySQL 8.0 via a VitessKeyspace
-
@@ -5078,6 +5079,7 @@
VitessKeyspaceImages
VitessKeyspaceSpec
-
@@ -5936,6 +5939,24 @@
+VitessKeyspaceTemplate
+
+
+images
+
+
+VitessKeyspaceImages
+
+
+
+
+MoveTables
+operation, after which the source keyspace is destroyed.VitessKeyspaceTurndownPolicy
diff --git a/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go b/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go
index 81189b87..47cca2cf 100644
--- a/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go
+++ b/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go
@@ -69,3 +69,23 @@ func DefaultVitessKeyspaceImages(dst *VitessKeyspaceImages, clusterDefaults *Vit
dst.MysqldExporter = clusterDefaults.MysqldExporter
}
}
+
+// MergeVitessKeyspaceImages takes non-empty image values from a non-nil src
+// and sets them on dst.
+func MergeVitessKeyspaceImages(dst *VitessKeyspaceImages, src *VitessKeyspaceImages) {
+ if src.Vttablet != "" {
+ dst.Vttablet = src.Vttablet
+ }
+ if src.Vtorc != "" {
+ dst.Vtorc = src.Vtorc
+ }
+ if src.Vtbackup != "" {
+ dst.Vtbackup = src.Vtbackup
+ }
+ if src.Mysqld != nil {
+ dst.Mysqld = src.Mysqld
+ }
+ if dst.MysqldExporter != "" {
+ dst.MysqldExporter = src.MysqldExporter
+ }
+}
diff --git a/pkg/apis/planetscale/v2/vitesskeyspace_types.go b/pkg/apis/planetscale/v2/vitesskeyspace_types.go
index 6f4e0ff1..f631343f 100644
--- a/pkg/apis/planetscale/v2/vitesskeyspace_types.go
+++ b/pkg/apis/planetscale/v2/vitesskeyspace_types.go
@@ -51,10 +51,11 @@ type VitessKeyspaceSpec struct {
// GlobalLockserver are the params to connect to the global lockserver.
GlobalLockserver VitessLockserverParams `json:"globalLockserver"`
- // Images are not customizable by users at the keyspace level because version
- // skew across the cluster is discouraged except during rolling updates,
- // in which case this field is automatically managed by the VitessCluster
- // controller that owns this VitessKeyspace.
+ // Images are inherited from the VitessCluster spec, unless the user has
+ // specified keyspace-level overrides. Version skew across the cluster is
+ // discouraged except during rolling updates, in which case this field is
+ // automatically managed by the VitessCluster controller that owns this
+ // VitessKeyspace.
Images VitessKeyspaceImages `json:"images,omitempty"`
// ImagePullPolicies are inherited from the VitessCluster spec.
@@ -178,6 +179,15 @@ type VitessKeyspaceTemplate struct {
// Annotations can optionally be used to attach custom annotations to the VitessKeyspace object.
Annotations map[string]string `json:"annotations,omitempty"`
+
+ // Users are encouraged to let the VitessCluster controller automatically
+ // propagate image changes from the VitessCluster to the VitessKeyspace
+ // via rolling updates.
+ //
+ // For special cases, users may specify per-VitessKeyspace images. An
+ // example: migrating from MySQL 5.7 to MySQL 8.0 via a `MoveTables`
+ // operation, after which the source keyspace is destroyed.
+ Images VitessKeyspaceImages `json:"images,omitempty"`
}
// VitessOrchestratorSpec specifies deployment parameters for vtorc.
diff --git a/pkg/apis/planetscale/v2/zz_generated.deepcopy.go b/pkg/apis/planetscale/v2/zz_generated.deepcopy.go
index b7a8197d..6aa742f6 100644
--- a/pkg/apis/planetscale/v2/zz_generated.deepcopy.go
+++ b/pkg/apis/planetscale/v2/zz_generated.deepcopy.go
@@ -1999,6 +1999,7 @@ func (in *VitessKeyspaceTemplate) DeepCopyInto(out *VitessKeyspaceTemplate) {
(*out)[key] = val
}
}
+ in.Images.DeepCopyInto(&out.Images)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VitessKeyspaceTemplate.
diff --git a/pkg/controller/vitesscluster/reconcile_keyspaces.go b/pkg/controller/vitesscluster/reconcile_keyspaces.go
index 54ef4784..826d4e8e 100644
--- a/pkg/controller/vitesscluster/reconcile_keyspaces.go
+++ b/pkg/controller/vitesscluster/reconcile_keyspaces.go
@@ -149,6 +149,9 @@ func newVitessKeyspace(key client.ObjectKey, vt *planetscalev2.VitessCluster, pa
images := planetscalev2.VitessKeyspaceImages{}
planetscalev2.DefaultVitessKeyspaceImages(&images, &vt.Spec.Images)
+ // Apply user-defined overrides for images.
+ planetscalev2.MergeVitessKeyspaceImages(&images, &keyspace.Images)
+
// Copy parent labels map and add keyspace-specific label.
labels := make(map[string]string, len(parentLabels)+1)
for k, v := range parentLabels {
From 5030d17dd298a2411b31773b2d107efb8ec81a2a Mon Sep 17 00:00:00 2001
From: Max Englander
MysqldImage
VitessKeyspaceImages)
-
MysqldImage specifies the container image to use for mysqld, -as well as declaring which MySQL flavor setting in Vitess the -image is compatible with.
+TODO: Remove this once everything is migrated to MysqldImageNew.
+(Appears on: +VitessKeyspaceTemplateImages) +
++
MysqldImageNew specifies the container image to use for mysqld, +as well as declaring which MySQL flavor setting in Vitess the +image is compatible with.
+TODO: rename this to MysqldImage once MysqldImage is removed.
+ +Field | +Description | +
---|---|
+mysql56Compatible
+
+string
+
+ |
+
+ Mysql56Compatible is a container image (including version tag) for mysqld +that’s compatible with the Vitess “MySQL56” flavor setting. + |
+
+mysql80Compatible
+
+string
+
+ |
+
+ Mysql80Compatible is a container image (including version tag) for mysqld +that’s compatible with the Vitess “MySQL80” flavor setting. + |
+
@@ -4774,7 +4818,8 @@
(Appears on: VitessKeyspaceSpec, -VitessKeyspaceTemplate, VitessShardSpec)
@@ -5563,7 +5607,8 @@
images
-
-VitessKeyspaceImages
+
+VitessKeyspaceTemplateImages
Users are encouraged to let the VitessCluster controller automatically -propagate image changes from the VitessCluster to the VitessKeyspace -via rolling updates.
For special cases, users may specify per-VitessKeyspace images. An
example: migrating from MySQL 5.7 to MySQL 8.0 via a MoveTables
operation, after which the source keyspace is destroyed.
+(Appears on: +VitessKeyspaceTemplate) +
++
VitessKeyspaceTemplateImages specifies user-definable container images to +use for this keyspace.
+ +Field | +Description | +
---|---|
+mysqld
+
+
+MysqldImageNew
+
+
+ |
+
+ Mysqld specifies the container image to use for mysqld, as well as +declaring which MySQL flavor setting in Vitess the image is +compatible with. Only one flavor image may be provided at a time. +mysqld running alongside each tablet. + |
+
string
alias)diff --git a/pkg/apis/planetscale/v2/vitesscluster_types.go b/pkg/apis/planetscale/v2/vitesscluster_types.go index 8bbac586..f796d11b 100644 --- a/pkg/apis/planetscale/v2/vitesscluster_types.go +++ b/pkg/apis/planetscale/v2/vitesscluster_types.go @@ -244,9 +244,21 @@ type VitessImages struct { MysqldExporter string `json:"mysqldExporter,omitempty"` } -// MysqldImage specifies the container image to use for mysqld, +// MysqldImageNew specifies the container image to use for mysqld, // as well as declaring which MySQL flavor setting in Vitess the // image is compatible with. +// +// TODO: rename this to MysqldImage once MysqldImage is removed. +type MysqldImageNew struct { + // Mysql56Compatible is a container image (including version tag) for mysqld + // that's compatible with the Vitess "MySQL56" flavor setting. + Mysql56Compatible string `json:"mysql56Compatible,omitempty"` + // Mysql80Compatible is a container image (including version tag) for mysqld + // that's compatible with the Vitess "MySQL80" flavor setting. + Mysql80Compatible string `json:"mysql80Compatible,omitempty"` +} + +// TODO: Remove this once everything is migrated to MysqldImageNew. type MysqldImage struct { // Mysql56Compatible is a container image (including version tag) for mysqld // that's compatible with the Vitess "MySQL56" flavor setting. diff --git a/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go b/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go index f659b079..aa5c51d2 100644 --- a/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go +++ b/pkg/apis/planetscale/v2/vitesskeyspace_defaults.go @@ -70,22 +70,11 @@ func DefaultVitessKeyspaceImages(dst *VitessKeyspaceImages, clusterDefaults *Vit } } -// MergeVitessKeyspaceImages takes non-empty image values from a non-nil src +// MergeVitessKeyspaceTemplateImages takes non-empty image values from a non-nil src // and sets them on dst. -func MergeVitessKeyspaceImages(dst *VitessKeyspaceImages, src *VitessKeyspaceImages) { - if src.Vttablet != "" { - dst.Vttablet = src.Vttablet - } - if src.Vtorc != "" { - dst.Vtorc = src.Vtorc - } - if src.Vtbackup != "" { - dst.Vtbackup = src.Vtbackup - } +func MergeVitessKeyspaceTemplateImages(dst *VitessKeyspaceImages, src *VitessKeyspaceTemplateImages) { if src.Mysqld != nil { - dst.Mysqld = src.Mysqld - } - if src.MysqldExporter != "" { - dst.MysqldExporter = src.MysqldExporter + dst.Mysqld.Mysql56Compatible = src.Mysqld.Mysql56Compatible + dst.Mysqld.Mysql80Compatible = src.Mysqld.Mysql80Compatible } } diff --git a/pkg/apis/planetscale/v2/vitesskeyspace_types.go b/pkg/apis/planetscale/v2/vitesskeyspace_types.go index f631343f..1550b242 100644 --- a/pkg/apis/planetscale/v2/vitesskeyspace_types.go +++ b/pkg/apis/planetscale/v2/vitesskeyspace_types.go @@ -55,7 +55,8 @@ type VitessKeyspaceSpec struct { // specified keyspace-level overrides. Version skew across the cluster is // discouraged except during rolling updates, in which case this field is // automatically managed by the VitessCluster controller that owns this - // VitessKeyspace. + // VitessKeyspace, or else when a user has specified a keyspace-level + // images on VitessKeyspaceTemplate. Images VitessKeyspaceImages `json:"images,omitempty"` // ImagePullPolicies are inherited from the VitessCluster spec. @@ -180,14 +181,20 @@ type VitessKeyspaceTemplate struct { // Annotations can optionally be used to attach custom annotations to the VitessKeyspace object. Annotations map[string]string `json:"annotations,omitempty"` - // Users are encouraged to let the VitessCluster controller automatically - // propagate image changes from the VitessCluster to the VitessKeyspace - // via rolling updates. - // // For special cases, users may specify per-VitessKeyspace images. An // example: migrating from MySQL 5.7 to MySQL 8.0 via a `MoveTables` // operation, after which the source keyspace is destroyed. - Images VitessKeyspaceImages `json:"images,omitempty"` + Images VitessKeyspaceTemplateImages `json:"images,omitempty"` +} + +// VitessKeyspaceTemplateImages specifies user-definable container images to +// use for this keyspace. +type VitessKeyspaceTemplateImages struct { + // Mysqld specifies the container image to use for mysqld, as well as + // declaring which MySQL flavor setting in Vitess the image is + // compatible with. Only one flavor image may be provided at a time. + // mysqld running alongside each tablet. + Mysqld *MysqldImageNew `json:"mysqld,omitempty"` } // VitessOrchestratorSpec specifies deployment parameters for vtorc. diff --git a/pkg/apis/planetscale/v2/zz_generated.deepcopy.go b/pkg/apis/planetscale/v2/zz_generated.deepcopy.go index 6aa742f6..4243ff17 100644 --- a/pkg/apis/planetscale/v2/zz_generated.deepcopy.go +++ b/pkg/apis/planetscale/v2/zz_generated.deepcopy.go @@ -421,6 +421,21 @@ func (in *MysqldImage) DeepCopy() *MysqldImage { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MysqldImageNew) DeepCopyInto(out *MysqldImageNew) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MysqldImageNew. +func (in *MysqldImageNew) DeepCopy() *MysqldImageNew { + if in == nil { + return nil + } + out := new(MysqldImageNew) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MysqldSpec) DeepCopyInto(out *MysqldSpec) { *out = *in @@ -2012,6 +2027,26 @@ func (in *VitessKeyspaceTemplate) DeepCopy() *VitessKeyspaceTemplate { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VitessKeyspaceTemplateImages) DeepCopyInto(out *VitessKeyspaceTemplateImages) { + *out = *in + if in.Mysqld != nil { + in, out := &in.Mysqld, &out.Mysqld + *out = new(MysqldImageNew) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VitessKeyspaceTemplateImages. +func (in *VitessKeyspaceTemplateImages) DeepCopy() *VitessKeyspaceTemplateImages { + if in == nil { + return nil + } + out := new(VitessKeyspaceTemplateImages) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VitessLockserverParams) DeepCopyInto(out *VitessLockserverParams) { *out = *in diff --git a/pkg/controller/vitesscluster/reconcile_keyspaces.go b/pkg/controller/vitesscluster/reconcile_keyspaces.go index 826d4e8e..25136491 100644 --- a/pkg/controller/vitesscluster/reconcile_keyspaces.go +++ b/pkg/controller/vitesscluster/reconcile_keyspaces.go @@ -150,7 +150,7 @@ func newVitessKeyspace(key client.ObjectKey, vt *planetscalev2.VitessCluster, pa planetscalev2.DefaultVitessKeyspaceImages(&images, &vt.Spec.Images) // Apply user-defined overrides for images. - planetscalev2.MergeVitessKeyspaceImages(&images, &keyspace.Images) + planetscalev2.MergeVitessKeyspaceTemplateImages(&images, &keyspace.Images) // Copy parent labels map and add keyspace-specific label. labels := make(map[string]string, len(parentLabels)+1)