(ctx devspacecontext.Context, deployment *appsv1.Deployment, devPod *latest.DevPod)
| 297 | } |
| 298 | |
| 299 | func createPVC(ctx devspacecontext.Context, deployment *appsv1.Deployment, devPod *latest.DevPod) error { |
| 300 | var err error |
| 301 | size := resource.MustParse("10Gi") |
| 302 | if devPod.PersistenceOptions != nil && devPod.PersistenceOptions.Size != "" { |
| 303 | size, err = resource.ParseQuantity(devPod.PersistenceOptions.Size) |
| 304 | if err != nil { |
| 305 | return fmt.Errorf("error parsing persistent volume size %s: %v", devPod.PersistenceOptions.Size, err) |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | var storageClassName *string |
| 310 | if devPod.PersistenceOptions != nil && devPod.PersistenceOptions.StorageClassName != "" { |
| 311 | storageClassName = &devPod.PersistenceOptions.StorageClassName |
| 312 | } |
| 313 | |
| 314 | accessModes := []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce} |
| 315 | if devPod.PersistenceOptions != nil && devPod.PersistenceOptions.AccessModes != nil { |
| 316 | accessModes = []corev1.PersistentVolumeAccessMode{} |
| 317 | for _, accessMode := range devPod.PersistenceOptions.AccessModes { |
| 318 | accessModes = append(accessModes, corev1.PersistentVolumeAccessMode(accessMode)) |
| 319 | } |
| 320 | } |
| 321 | |
| 322 | name := getClaimName(deployment, devPod) |
| 323 | |
| 324 | _, err = ctx.KubeClient().KubeClient().CoreV1().PersistentVolumeClaims(deployment.Namespace).Create(ctx.Context(), &corev1.PersistentVolumeClaim{ |
| 325 | ObjectMeta: metav1.ObjectMeta{ |
| 326 | Name: name, |
| 327 | Namespace: deployment.Namespace, |
| 328 | OwnerReferences: []metav1.OwnerReference{ |
| 329 | { |
| 330 | APIVersion: appsv1.SchemeGroupVersion.String(), |
| 331 | Kind: "Deployment", |
| 332 | Name: deployment.Name, |
| 333 | UID: deployment.UID, |
| 334 | Controller: ptr.Bool(true), |
| 335 | }, |
| 336 | }, |
| 337 | }, |
| 338 | Spec: corev1.PersistentVolumeClaimSpec{ |
| 339 | AccessModes: accessModes, |
| 340 | Resources: corev1.VolumeResourceRequirements{ |
| 341 | Requests: map[corev1.ResourceName]resource.Quantity{ |
| 342 | corev1.ResourceStorage: size, |
| 343 | }, |
| 344 | }, |
| 345 | StorageClassName: storageClassName, |
| 346 | }, |
| 347 | }, metav1.CreateOptions{}) |
| 348 | if err != nil { |
| 349 | if kerrors.IsAlreadyExists(err) { |
| 350 | ctx.Log().Debugf("PVC %s already exists for replaced pod %s", name, deployment.Name) |
| 351 | return nil |
| 352 | } |
| 353 | |
| 354 | return err |
| 355 | } |
| 356 |
no test coverage detected