@@ -952,3 +952,210 @@ var _ = Describe("Nova multi cell", func() {
952952 })
953953 })
954954})
955+
956+ func CreateNovaWith4CellsAndEnsureReady (novaNames NovaNames ) {
957+ cell0 := novaNames .Cells ["cell0" ]
958+ cell1 := novaNames .Cells ["cell1" ]
959+ cell2 := novaNames .Cells ["cell2" ]
960+ cell3 := novaNames .Cells ["cell3" ]
961+
962+ DeferCleanup (k8sClient .Delete , ctx , CreateNovaSecret (novaNames .NovaName .Namespace , SecretName ))
963+ DeferCleanup (k8sClient .Delete , ctx , CreateNovaMessageBusSecret (cell0 ))
964+ DeferCleanup (k8sClient .Delete , ctx , CreateNovaMessageBusSecret (cell1 ))
965+ DeferCleanup (k8sClient .Delete , ctx , CreateNovaMessageBusSecret (cell2 ))
966+ DeferCleanup (k8sClient .Delete , ctx , CreateNovaMessageBusSecret (cell3 ))
967+
968+ serviceSpec := corev1.ServiceSpec {Ports : []corev1.ServicePort {{Port : 3306 }}}
969+ DeferCleanup (
970+ mariadb .DeleteDBService ,
971+ mariadb .CreateDBService (novaNames .APIMariaDBDatabaseName .Namespace , novaNames .APIMariaDBDatabaseName .Name , serviceSpec ))
972+ DeferCleanup (mariadb .DeleteDBService , mariadb .CreateDBService (cell0 .MariaDBDatabaseName .Namespace , cell0 .MariaDBDatabaseName .Name , serviceSpec ))
973+ DeferCleanup (mariadb .DeleteDBService , mariadb .CreateDBService (cell1 .MariaDBDatabaseName .Namespace , cell1 .MariaDBDatabaseName .Name , serviceSpec ))
974+ DeferCleanup (mariadb .DeleteDBService , mariadb .CreateDBService (cell2 .MariaDBDatabaseName .Namespace , cell2 .MariaDBDatabaseName .Name , serviceSpec ))
975+ DeferCleanup (mariadb .DeleteDBService , mariadb .CreateDBService (cell3 .MariaDBDatabaseName .Namespace , cell3 .MariaDBDatabaseName .Name , serviceSpec ))
976+
977+ apiMariaDBAccount , apiMariaDBSecret := mariadb .CreateMariaDBAccountAndSecret (
978+ novaNames .APIMariaDBDatabaseAccount , mariadbv1.MariaDBAccountSpec {})
979+ DeferCleanup (k8sClient .Delete , ctx , apiMariaDBAccount )
980+ DeferCleanup (k8sClient .Delete , ctx , apiMariaDBSecret )
981+
982+ cell0Account , cell0Secret := mariadb .CreateMariaDBAccountAndSecret (
983+ cell0 .MariaDBAccountName , mariadbv1.MariaDBAccountSpec {})
984+ DeferCleanup (k8sClient .Delete , ctx , cell0Account )
985+ DeferCleanup (k8sClient .Delete , ctx , cell0Secret )
986+
987+ cell1Account , cell1Secret := mariadb .CreateMariaDBAccountAndSecret (
988+ cell1 .MariaDBAccountName , mariadbv1.MariaDBAccountSpec {})
989+ DeferCleanup (th .DeleteInstance , cell1Account )
990+ DeferCleanup (
991+ th .DeleteSecret ,
992+ types.NamespacedName {Name : cell1Secret .Name , Namespace : cell1Secret .Namespace })
993+
994+ cell2Account , cell2Secret := mariadb .CreateMariaDBAccountAndSecret (
995+ cell2 .MariaDBAccountName , mariadbv1.MariaDBAccountSpec {})
996+ DeferCleanup (k8sClient .Delete , ctx , cell2Account )
997+ DeferCleanup (k8sClient .Delete , ctx , cell2Secret )
998+
999+ cell3Account , cell3Secret := mariadb .CreateMariaDBAccountAndSecret (
1000+ cell3 .MariaDBAccountName , mariadbv1.MariaDBAccountSpec {})
1001+ // DeferCleanup(k8sClient.Delete, ctx, cell3Account)
1002+ // DeferCleanup(k8sClient.Delete, ctx, cell3Secret)
1003+ logger .Info ("Not Creating defercleanup for cell3 ..." , " -- " , cell3Secret )
1004+
1005+ spec := GetDefaultNovaSpec ()
1006+ cell0Template := GetDefaultNovaCellTemplate ()
1007+ cell0Template ["cellDatabaseInstance" ] = cell0 .MariaDBDatabaseName .Name
1008+ cell0Template ["cellDatabaseAccount" ] = cell0Account .Name
1009+
1010+ cell1Template := GetDefaultNovaCellTemplate ()
1011+ cell1Template ["cellDatabaseInstance" ] = cell1 .MariaDBDatabaseName .Name
1012+ cell1Template ["cellDatabaseAccount" ] = cell1Account .Name
1013+ cell1Template ["cellMessageBusInstance" ] = cell1 .TransportURLName .Name
1014+ cell1Template ["novaComputeTemplates" ] = map [string ]interface {}{
1015+ ironicComputeName : GetDefaultNovaComputeTemplate (),
1016+ }
1017+
1018+ cell2Template := GetDefaultNovaCellTemplate ()
1019+ cell2Template ["cellDatabaseInstance" ] = cell2 .MariaDBDatabaseName .Name
1020+ cell2Template ["cellDatabaseAccount" ] = cell2Account .Name
1021+ cell2Template ["cellMessageBusInstance" ] = cell2 .TransportURLName .Name
1022+ cell2Template ["hasAPIAccess" ] = false
1023+
1024+ cell3Template := GetDefaultNovaCellTemplate ()
1025+ cell3Template ["cellDatabaseInstance" ] = cell3 .MariaDBDatabaseName .Name
1026+ cell3Template ["cellDatabaseAccount" ] = cell3Account .Name
1027+ cell3Template ["cellMessageBusInstance" ] = cell3 .TransportURLName .Name
1028+ cell3Template ["hasAPIAccess" ] = false
1029+
1030+ spec ["cellTemplates" ] = map [string ]interface {}{
1031+ "cell0" : cell0Template ,
1032+ "cell1" : cell1Template ,
1033+ "cell2" : cell2Template ,
1034+ "cell3" : cell3Template ,
1035+ }
1036+ spec ["apiDatabaseInstance" ] = novaNames .APIMariaDBDatabaseName .Name
1037+ spec ["apiMessageBusInstance" ] = cell0 .TransportURLName .Name
1038+
1039+ DeferCleanup (th .DeleteInstance , CreateNova (novaNames .NovaName , spec ))
1040+ DeferCleanup (keystone .DeleteKeystoneAPI , keystone .CreateKeystoneAPI (novaNames .NovaName .Namespace ))
1041+ memcachedSpec := memcachedv1.MemcachedSpec {
1042+ MemcachedSpecCore : memcachedv1.MemcachedSpecCore {
1043+ Replicas : ptr .To (int32 (3 )),
1044+ },
1045+ }
1046+
1047+ DeferCleanup (infra .DeleteMemcached , infra .CreateMemcached (novaNames .NovaName .Namespace , MemcachedInstance , memcachedSpec ))
1048+ infra .SimulateMemcachedReady (novaNames .MemcachedNamespace )
1049+ keystone .SimulateKeystoneServiceReady (novaNames .KeystoneServiceName )
1050+ // END of common logic with Nova multi cell test
1051+
1052+ mariadb .SimulateMariaDBDatabaseCompleted (novaNames .APIMariaDBDatabaseName )
1053+ mariadb .SimulateMariaDBDatabaseCompleted (cell0 .MariaDBDatabaseName )
1054+ mariadb .SimulateMariaDBDatabaseCompleted (cell1 .MariaDBDatabaseName )
1055+ mariadb .SimulateMariaDBDatabaseCompleted (cell2 .MariaDBDatabaseName )
1056+ mariadb .SimulateMariaDBDatabaseCompleted (cell3 .MariaDBDatabaseName )
1057+
1058+ mariadb .SimulateMariaDBAccountCompleted (novaNames .APIMariaDBDatabaseAccount )
1059+ mariadb .SimulateMariaDBAccountCompleted (cell0 .MariaDBAccountName )
1060+ mariadb .SimulateMariaDBAccountCompleted (cell1 .MariaDBAccountName )
1061+ mariadb .SimulateMariaDBAccountCompleted (cell2 .MariaDBAccountName )
1062+ mariadb .SimulateMariaDBAccountCompleted (cell3 .MariaDBAccountName )
1063+
1064+ infra .SimulateTransportURLReady (cell0 .TransportURLName )
1065+ infra .SimulateTransportURLReady (cell1 .TransportURLName )
1066+ infra .SimulateTransportURLReady (cell2 .TransportURLName )
1067+ infra .SimulateTransportURLReady (cell3 .TransportURLName )
1068+
1069+ th .SimulateJobSuccess (cell0 .DBSyncJobName )
1070+ th .SimulateStatefulSetReplicaReady (cell0 .ConductorStatefulSetName )
1071+ th .SimulateJobSuccess (cell0 .CellMappingJobName )
1072+
1073+ th .SimulateStatefulSetReplicaReady (cell1 .NoVNCProxyStatefulSetName )
1074+ th .SimulateJobSuccess (cell1 .DBSyncJobName )
1075+ th .SimulateStatefulSetReplicaReady (cell1 .ConductorStatefulSetName )
1076+ th .SimulateStatefulSetReplicaReady (cell1 .NovaComputeStatefulSetName )
1077+ th .SimulateJobSuccess (cell1 .CellMappingJobName )
1078+ th .SimulateJobSuccess (cell1 .HostDiscoveryJobName )
1079+
1080+ th .SimulateStatefulSetReplicaReady (cell2 .NoVNCProxyStatefulSetName )
1081+ th .SimulateJobSuccess (cell2 .DBSyncJobName )
1082+ th .SimulateStatefulSetReplicaReady (cell2 .ConductorStatefulSetName )
1083+ th .SimulateJobSuccess (cell2 .CellMappingJobName )
1084+
1085+ th .SimulateStatefulSetReplicaReady (cell3 .NoVNCProxyStatefulSetName )
1086+ th .SimulateJobSuccess (cell3 .DBSyncJobName )
1087+ th .SimulateStatefulSetReplicaReady (cell3 .ConductorStatefulSetName )
1088+ th .SimulateJobSuccess (cell3 .CellMappingJobName )
1089+
1090+ th .ExpectCondition (
1091+ novaNames .NovaName ,
1092+ ConditionGetterFunc (NovaConditionGetter ),
1093+ novav1 .NovaAllCellsReadyCondition ,
1094+ corev1 .ConditionTrue ,
1095+ )
1096+ SimulateReadyOfNovaTopServices ()
1097+ th .ExpectCondition (
1098+ novaNames .NovaName ,
1099+ ConditionGetterFunc (NovaConditionGetter ),
1100+ condition .ReadyCondition ,
1101+ corev1 .ConditionTrue ,
1102+ )
1103+ }
1104+
1105+ var _ = Describe ("Nova multi cell deletion" , func () {
1106+ BeforeEach (func () {
1107+
1108+ CreateNovaWith4CellsAndEnsureReady (novaNames )
1109+
1110+ })
1111+
1112+ When ("Nova CR instance is created with 4 cells" , func () {
1113+ It ("delete cell2 and cell3, verify for cell3" , func () {
1114+
1115+ nova := GetNova (novaNames .NovaName )
1116+ Expect (nova .Status .RegisteredCells ).To (HaveKey (cell0 .CellCRName .Name ), "cell0 is not in the RegisteredCells" , nova .Status .RegisteredCells )
1117+ Expect (nova .Status .RegisteredCells ).To (HaveKey (cell1 .CellCRName .Name ), "cell1 is not in the RegisteredCells" , nova .Status .RegisteredCells )
1118+ Expect (nova .Status .RegisteredCells ).To (HaveKey (cell2 .CellCRName .Name ), "cell2 is not in the RegisteredCells" , nova .Status .RegisteredCells )
1119+ Expect (nova .Status .RegisteredCells ).To (HaveKey (cell3 .CellCRName .Name ), "cell3 is not in the RegisteredCells" , nova .Status .RegisteredCells )
1120+
1121+ // manually delete DB for cell3, to reproduce the error in cell3 deletion
1122+ // Expect(k8sClient.Delete(ctx, mariadb.GetMariaDBAccount(cell3.MariaDBDatabaseName))).To(Succeed())
1123+
1124+ Expect (k8sClient .Delete (
1125+ ctx ,
1126+ mariadb .GetMariaDBDatabase (cell3 .MariaDBDatabaseName ))).To (Succeed ())
1127+
1128+ cell3Account := mariadb .GetMariaDBAccount (cell3 .MariaDBAccountName )
1129+ cell3Secret := th .GetSecret (types.NamespacedName {
1130+ Name : cell3Account .Spec .Secret ,
1131+ Namespace : cell3 .MariaDBAccountName .Namespace })
1132+
1133+ // Expect(k8sClient.Delete(ctx, mariadb.GetSecret(cell3Secret))).To(Succeed())
1134+
1135+ th .DeleteSecret (
1136+ types.NamespacedName {
1137+ Name : cell3Secret .Name ,
1138+ Namespace : cell3Secret .Namespace })
1139+
1140+ cell3Secret = th .GetSecret (types.NamespacedName {
1141+ Name : cell3Account .Spec .Secret ,
1142+ Namespace : cell0 .MariaDBAccountName .Namespace })
1143+
1144+ Eventually (func (g Gomega ) {
1145+ nova := GetNova (novaNames .NovaName )
1146+ // delete(nova.Spec.CellTemplates, "cell2")
1147+ delete (nova .Spec .CellTemplates , "cell3" )
1148+ g .Expect (k8sClient .Update (ctx , nova )).To (Succeed ())
1149+ }, timeout , interval ).Should (Succeed ())
1150+
1151+ Eventually (func (g Gomega ) {
1152+ nova := GetNova (novaNames .NovaName )
1153+ // g.Expect(nova.Status.RegisteredCells).NotTo(HaveKey(cell2.CellCRName.Name))
1154+ g .Expect (nova .Status .RegisteredCells ).NotTo (HaveKey (cell3 .CellCRName .Name ))
1155+ }, timeout , interval ).Should (Succeed ())
1156+
1157+ NovaCellNotExists (cell3 .CellCRName )
1158+
1159+ })
1160+ })
1161+ })
0 commit comments