@@ -107,6 +107,9 @@ var _ = Describe("MysqlCluster controller", func() {
107107 Spec : api.MysqlClusterSpec {
108108 Replicas : & two ,
109109 SecretName : secret .Name ,
110+ VolumeSpec : api.VolumeSpec {
111+ PersistentVolumeClaim : & corev1.PersistentVolumeClaimSpec {},
112+ },
110113 },
111114 })
112115 clusterKey = types.NamespacedName {
@@ -356,6 +359,107 @@ var _ = Describe("MysqlCluster controller", func() {
356359 })
357360 })
358361 })
362+
363+ Context ("with secret and uninitialized cluster" , func () {
364+ var (
365+ expectedRequest reconcile.Request
366+ cluster * mysqlcluster.MysqlCluster
367+ clusterKey types.NamespacedName
368+ secret * corev1.Secret
369+ )
370+
371+ BeforeEach (func () {
372+ name := fmt .Sprintf ("cluster-%d" , rand .Int31 ())
373+ ns := "default"
374+
375+ expectedRequest = reconcile.Request {
376+ NamespacedName : types.NamespacedName {Name : name , Namespace : ns },
377+ }
378+
379+ secret = & corev1.Secret {
380+ ObjectMeta : metav1.ObjectMeta {Name : "the-secret" , Namespace : ns },
381+ StringData : map [string ]string {
382+ "ROOT_PASSWORD" : "this-is-secret" ,
383+ },
384+ }
385+
386+ cluster = mysqlcluster .New (& api.MysqlCluster {
387+ ObjectMeta : metav1.ObjectMeta {Name : name , Namespace : ns },
388+ Spec : api.MysqlClusterSpec {
389+ Replicas : & two ,
390+ SecretName : secret .Name ,
391+ },
392+ })
393+
394+ clusterKey = types.NamespacedName {
395+ Name : cluster .Name ,
396+ Namespace : cluster .Namespace ,
397+ }
398+
399+ Expect (c .Create (context .TODO (), secret )).To (Succeed ())
400+ })
401+
402+ AfterEach (func () {
403+ c .Delete (context .TODO (), secret )
404+ c .Delete (context .TODO (), cluster .Unwrap ())
405+ })
406+
407+ It ("should update cluster new fields from the deprecated ones" , func () {
408+ backupURL := "gs://bucket/"
409+ accessModes := []corev1.PersistentVolumeAccessMode {
410+ corev1 .ReadWriteOnce ,
411+ }
412+
413+ cluster .Spec .BackupURI = backupURL
414+ cluster .Spec .VolumeSpec = api.VolumeSpec {
415+ // old PVC field
416+ PersistentVolumeClaimSpec : corev1.PersistentVolumeClaimSpec {
417+ AccessModes : accessModes ,
418+ },
419+ }
420+
421+ // crete cluster
422+ Expect (c .Create (context .TODO (), cluster .Unwrap ())).To (Succeed ())
423+ Eventually (requests , timeout ).Should (Receive (Equal (expectedRequest )))
424+ // one extra reconcile event because of spec updates
425+ Eventually (requests , timeout ).Should (Receive (Equal (expectedRequest )))
426+ Eventually (requests , timeout ).Should (Receive (Equal (expectedRequest )))
427+
428+ Expect (c .Get (context .TODO (), clusterKey , cluster .Unwrap ())).To (Succeed ())
429+ Expect (cluster .Spec .VolumeSpec .PersistentVolumeClaim .AccessModes ).To (
430+ Equal (accessModes ))
431+ Expect (cluster .Spec .BackupURL ).To (Equal (backupURL ))
432+ })
433+
434+ It ("should set emptyDir as data volume" , func () {
435+ cluster .Spec .VolumeSpec = api.VolumeSpec {
436+ EmptyDir : & corev1.EmptyDirVolumeSource {},
437+ }
438+
439+ // crete cluster
440+ Expect (c .Create (context .TODO (), cluster .Unwrap ())).To (Succeed ())
441+ Eventually (requests , timeout ).Should (Receive (Equal (expectedRequest )))
442+ Eventually (requests , timeout ).Should (Receive (Equal (expectedRequest )))
443+
444+ sts := & appsv1.StatefulSet {}
445+ stsKey := types.NamespacedName {
446+ Name : cluster .GetNameForResource (mysqlcluster .StatefulSet ),
447+ Namespace : cluster .Namespace ,
448+ }
449+
450+ Expect (c .Get (context .TODO (), stsKey , sts )).To (Succeed ())
451+
452+ Expect (sts .Spec .Template .Spec .Volumes ).To (ContainElement (Equal (
453+ corev1.Volume {
454+ Name : "data" ,
455+ VolumeSource : corev1.VolumeSource {
456+ EmptyDir : cluster .Spec .VolumeSpec .EmptyDir ,
457+ },
458+ },
459+ )))
460+ })
461+
462+ })
359463})
360464
361465func removeAllCreatedResource (c client.Client , clusterComps []runtime.Object ) {
0 commit comments