@@ -391,6 +391,37 @@ def _load_chart_values(chart_root: Any) -> dict[str, Any]:
391391 return values_content
392392
393393
394+ async def _create_fresh_pvcs (
395+ namespace : str ,
396+ storage_class_name : str ,
397+ parameters : DeploymentParameters ,
398+ * ,
399+ pitr_enabled : bool ,
400+ ) -> None :
401+ """Create empty block PVCs for a brand-new deployment before helm install."""
402+ from .kubernetes .pvc import create_pvc
403+
404+ access_modes = ["ReadWriteMany" ]
405+
406+ def _pvc (name : str , size : str ) -> kubernetes_client .V1PersistentVolumeClaim :
407+ return kubernetes_client .V1PersistentVolumeClaim (
408+ metadata = kubernetes_client .V1ObjectMeta (name = name ),
409+ spec = kubernetes_client .V1PersistentVolumeClaimSpec (
410+ access_modes = access_modes ,
411+ storage_class_name = storage_class_name ,
412+ volume_mode = "Block" ,
413+ resources = kubernetes_client .V1VolumeResourceRequirements (requests = {"storage" : size }),
414+ ),
415+ )
416+
417+ db_pvc_name = f"{ _autoscaler_vm_name ()} { AUTOSCALER_PVC_SUFFIX } "
418+ await create_pvc (namespace , _pvc (db_pvc_name , str (parameters .database_size )))
419+
420+ if pitr_enabled :
421+ wal_pvc_name = f"{ _autoscaler_vm_name ()} { AUTOSCALER_WAL_PVC_SUFFIX } "
422+ await create_pvc (namespace , _pvc (wal_pvc_name , PITR_WAL_PVC_SIZE ))
423+
424+
394425def _configure_vela_values (
395426 values_content : dict [str , Any ],
396427 * ,
@@ -399,7 +430,6 @@ def _configure_vela_values(
399430 database_admin_password : str ,
400431 pgbouncer_admin_password : str ,
401432 storage_class_name : str ,
402- use_existing_db_pvc : bool ,
403433 pgbouncer_config : Mapping [str , int ] | None ,
404434 enable_file_storage : bool ,
405435 pitr_enabled : bool ,
@@ -451,7 +481,6 @@ def _configure_vela_values(
451481 pg_wal_spec = values_content .setdefault ("pg_wal" , wal_archive_spec or {})
452482 pg_wal_spec ["enabled" ] = pitr_enabled
453483 wal_persistence = pg_wal_spec .setdefault ("persistence" , {})
454- wal_persistence ["create" ] = not use_existing_db_pvc
455484 wal_persistence ["size" ] = PITR_WAL_PVC_SIZE
456485 wal_persistence ["storageClassName" ] = storage_class_name
457486 wal_persistence ["claimName" ] = wal_persistence .get ("claimName" ) or (
@@ -461,8 +490,6 @@ def _configure_vela_values(
461490
462491 db_persistence = db_spec .setdefault ("persistence" , {})
463492 db_persistence ["size" ] = str (parameters .database_size )
464- if use_existing_db_pvc :
465- db_persistence ["create" ] = False
466493 db_persistence ["storageClassName" ] = storage_class_name
467494
468495 autoscaler_spec = values_content .setdefault ("autoscalerVm" , {})
@@ -479,7 +506,6 @@ def _configure_vela_values(
479506 autoscaler_resources ["memorySlots" ] = memory_slots
480507
481508 autoscaler_persistence = autoscaler_spec .setdefault ("persistence" , {})
482- autoscaler_persistence ["create" ] = not use_existing_db_pvc
483509 autoscaler_persistence ["claimName" ] = f"{ _autoscaler_vm_name ()} { AUTOSCALER_PVC_SUFFIX } "
484510 autoscaler_persistence ["size" ] = str (parameters .database_size )
485511 autoscaler_persistence ["storageClassName" ] = storage_class_name
@@ -523,14 +549,17 @@ async def create_vela_config(
523549 values_content = _load_chart_values (chart )
524550
525551 storage_class_name = await ensure_branch_storage_class (branch_id , iops = parameters .iops )
552+
553+ if not use_existing_db_pvc :
554+ await _create_fresh_pvcs (namespace , storage_class_name , parameters , pitr_enabled = pitr_enabled )
555+
526556 values_content = _configure_vela_values (
527557 values_content ,
528558 parameters = parameters ,
529559 jwt_secret = jwt_secret ,
530560 database_admin_password = database_admin_password ,
531561 pgbouncer_admin_password = pgbouncer_admin_password ,
532562 storage_class_name = storage_class_name ,
533- use_existing_db_pvc = use_existing_db_pvc ,
534563 pgbouncer_config = pgbouncer_config ,
535564 enable_file_storage = parameters .enable_file_storage ,
536565 pitr_enabled = pitr_enabled ,
0 commit comments