@@ -171,3 +171,90 @@ func TestPVCResize(t *testing.T) {
171171 }
172172
173173}
174+
175+ func TestPVCTemplateResize (t * testing.T ) {
176+ longOrSkip (t )
177+
178+ k8sNameSpace := getNamespace (t )
179+ k8sClient := mustNewKubeClient (t )
180+
181+ mode := api .DeploymentModeCluster
182+ engine := api .StorageEngineRocksDB
183+
184+ size10GB , _ := resource .ParseQuantity ("10Gi" )
185+ size08GB , _ := resource .ParseQuantity ("8Gi" )
186+
187+ deploymentClient := kubeArangoClient .MustNewInCluster ()
188+ deploymentTemplate := newDeployment (strings .Replace (fmt .Sprintf ("trsz-%s-%s-%s" , mode [:2 ], engine [:2 ], uniuri .NewLen (4 )), "." , "" , - 1 ))
189+ deploymentTemplate .Spec .Mode = api .NewMode (mode )
190+ deploymentTemplate .Spec .StorageEngine = api .NewStorageEngine (engine )
191+ deploymentTemplate .Spec .TLS = api.TLSSpec {}
192+ deploymentTemplate .Spec .SetDefaults (deploymentTemplate .GetName ()) // this must be last
193+ assert .NoError (t , deploymentTemplate .Spec .Validate ())
194+ assert .NotNil (t , deploymentTemplate .Spec .DBServers .VolumeClaimTemplate )
195+ deploymentTemplate .Spec .DBServers .VolumeClaimTemplate .Spec .Resources .Requests [corev1 .ResourceStorage ] = size08GB
196+
197+ // Create deployment
198+ _ , err := deploymentClient .DatabaseV1alpha ().ArangoDeployments (k8sNameSpace ).Create (deploymentTemplate )
199+ defer removeDeployment (deploymentClient , deploymentTemplate .GetName (), k8sNameSpace )
200+ assert .NoError (t , err , "failed to create deplyment: %s" , err )
201+
202+ depl , err := waitUntilDeployment (deploymentClient , deploymentTemplate .GetName (), k8sNameSpace , deploymentIsReady ())
203+ assert .NoError (t , err , fmt .Sprintf ("Deployment not running in time: %s" , err ))
204+
205+ // Get list of all pvcs for dbservers
206+ for _ , m := range depl .Status .Members .DBServers {
207+ pvc , err := k8sClient .CoreV1 ().PersistentVolumeClaims (k8sNameSpace ).Get (m .PersistentVolumeClaimName , metav1.GetOptions {})
208+ assert .NoError (t , err , "failed to get pvc: %s" , err )
209+ volumeSize , ok := pvc .Spec .Resources .Requests [corev1 .ResourceStorage ]
210+ assert .True (t , ok , "pvc does not have storage resource" )
211+ assert .True (t , volumeSize .Cmp (size08GB ) == 0 , "wrong volume size: expected: %s, found: %s" , size08GB .String (), volumeSize .String ())
212+ }
213+
214+ // Update the deployment
215+ // Try to change image version
216+ depl , err = updateDeployment (deploymentClient , deploymentTemplate .GetName (), k8sNameSpace ,
217+ func (depl * api.DeploymentSpec ) {
218+ depl .DBServers .VolumeClaimTemplate .Spec .Resources .Requests [corev1 .ResourceStorage ] = size10GB
219+ })
220+ if err != nil {
221+ t .Fatalf ("Failed to update the deployment" )
222+ } else {
223+ t .Log ("Updated deployment" )
224+ }
225+
226+ if err := retry .Retry (func () error {
227+ // Get list of all pvcs for dbservers and check for new size
228+ for _ , m := range depl .Status .Members .DBServers {
229+ pvc , err := k8sClient .CoreV1 ().PersistentVolumeClaims (k8sNameSpace ).Get (m .PersistentVolumeClaimName , metav1.GetOptions {})
230+ if err != nil {
231+ return err
232+ }
233+ volumeSize , ok := pvc .Spec .Resources .Requests [corev1 .ResourceStorage ]
234+ if ! ok {
235+ return fmt .Errorf ("pvc does not have storage resource" )
236+ }
237+ if volumeSize .Cmp (size10GB ) != 0 {
238+ return fmt .Errorf ("wrong pvc size: expected: %s, found: %s" , size10GB .String (), volumeSize .String ())
239+ }
240+ volume , err := k8sClient .CoreV1 ().PersistentVolumes ().Get (pvc .Spec .VolumeName , metav1.GetOptions {})
241+ if err != nil {
242+ return err
243+ }
244+ volumeSize , ok = volume .Spec .Capacity [corev1 .ResourceStorage ]
245+ if ! ok {
246+ return fmt .Errorf ("pv does not have storage resource" )
247+ }
248+ if volumeSize .Cmp (size10GB ) != 0 {
249+ return fmt .Errorf ("wrong volume size: expected: %s, found: %s" , size10GB .String (), volumeSize .String ())
250+ }
251+ if k8sutil .IsPersistentVolumeClaimFileSystemResizePending (pvc ) {
252+ return fmt .Errorf ("persistent volume claim file system resize pending" )
253+ }
254+ }
255+ return nil
256+ }, 5 * time .Minute ); err != nil {
257+ t .Fatalf ("PVCs not resized: %s" , err .Error ())
258+ }
259+
260+ }
0 commit comments