{"record":{"id":"8c27a8833021fadd","repo":"microsoft/aspire","slug":"unknown-persistent-volume-access-mode","errorCode":null,"errorMessage":"Unknown persistent volume access mode.","messagePattern":"Unknown persistent volume access mode\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs","lineNumber":499,"sourceCode":"        // Generate is builder-bound because it needs the application name and the AppHost path hash,\n        // so the candidate has to be built here even though the decision happens later.\n        var environmentName = volume.Resource.Parent.Name.ToKubernetesResourceName();\n        return VolumeNameGenerator.Generate(volume, $\"kubernetes-{environmentName}\");\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"PersistentVolumeAccessMode\"/> enum value to the\n    /// Kubernetes API string representation.\n    /// </summary>\n    internal static string ToKubernetesString(this PersistentVolumeAccessMode accessMode)\n    {\n        return accessMode switch\n        {\n            PersistentVolumeAccessMode.ReadWriteOnce => \"ReadWriteOnce\",\n            PersistentVolumeAccessMode.ReadOnlyMany => \"ReadOnlyMany\",\n            PersistentVolumeAccessMode.ReadWriteMany => \"ReadWriteMany\",\n            PersistentVolumeAccessMode.ReadWriteOncePod => \"ReadWriteOncePod\",\n            _ => throw new ArgumentOutOfRangeException(nameof(accessMode), accessMode, \"Unknown persistent volume access mode.\"),\n        };\n    }\n}\n","sourceCodeStart":481,"sourceCodeEnd":503,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs#L481-L503","documentation":"Converting a PersistentVolumeAccessMode enum to its Kubernetes string representation hit a value outside the known set (ReadWriteOnce, ReadOnlyMany, ReadWriteMany, ReadWriteOncePod) and throws ArgumentOutOfRangeException. This guards against newer or invalid enum values the library doesn't yet map.","triggerScenarios":"Passing a PersistentVolumeAccessMode value not in the four mapped members — possible with a newer enum version containing extra members, an invalid cast like (PersistentVolumeAccessMode)99, or a default/uninitialized enum of value 0 if 0 is unmapped.","commonSituations":"Upgrading the Aspire Kubernetes packages or a dependency that widened the enum before this library added mapping, or hand-rolling enum values from strings/ints parsed from YAML.","solutions":["Only use the supported access modes: ReadWriteOnce, ReadOnlyMany, ReadWriteMany, ReadWriteOncePod","Validate the enum value against the supported set before calling the API","Upgrade the Aspire.Hosting.Kubernetes package to a version that maps your enum value"],"exampleFix":"// before\nvar mode = (PersistentVolumeAccessMode)int.Parse(rawMode); // may be unmapped\nvolume.WithAccessMode(mode);\n// after\nif (Enum.IsDefined(mode) && mode is PersistentVolumeAccessMode.ReadWriteOnce or PersistentVolumeAccessMode.ReadOnlyMany or PersistentVolumeAccessMode.ReadWriteMany or PersistentVolumeAccessMode.ReadWriteOncePod)\n{\n    volume.WithAccessMode(mode);\n}","handlingStrategy":"validation","validationCode":"static readonly PersistentVolumeAccessMode[] Supported = [PersistentVolumeAccessMode.ReadWriteOnce, PersistentVolumeAccessMode.ReadOnlyMany, PersistentVolumeAccessMode.ReadWriteMany, PersistentVolumeAccessMode.ReadWriteOncePod];\nif (!Supported.Contains(accessMode)) throw new InvalidOperationException($\"Access mode {accessMode} is not supported.\");","typeGuard":"static bool IsSupportedAccessMode(PersistentVolumeAccessMode m) => m is PersistentVolumeAccessMode.ReadWriteOnce or PersistentVolumeAccessMode.ReadOnlyMany or PersistentVolumeAccessMode.ReadWriteMany or PersistentVolumeAccessMode.ReadWriteOncePod;","tryCatchPattern":"try { volume.WithAccessMode(accessMode); } catch (ArgumentOutOfRangeException ex) when (ex.ParamName == \"accessMode\") { volume.WithAccessMode(PersistentVolumeAccessMode.ReadWriteOnce); }","preventionTips":["Only use enum members documented by the library","Never cast ints/strings to PersistentVolumeAccessMode without Enum.IsDefined","Pin package versions so enum definitions and mappings stay in sync"],"tags":["kubernetes","persistent-volume","enum","argument-out-of-range"],"backgroundTag":"invalid-enum-value","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T09:17:21.228Z"}