# Test Report: values.yaml Override Priority **Date:** 2026-05-11 **Tester:** test-user-c **Cluster:** dbf824f1-9962-4d8e-881e-870c75fdb6f5 **Chart:** charts/vllm-serve:0.6.0 **Namespace:** ocdp-u-test-c --- ## Test Results ### Method 1: `values` JSON field only (vllm-values-json) - **Deployment:** ✅ Success (status: pending-install, no errors) - **Submitted values:** ```json { "cpuRequest": 2, "gpuLimit": 1, "gpuMem": 10000, "memoryLimit": "4Gi" } ``` - **Stored values (from API response):** ```json { "cpuRequest": 2, "gpuLimit": 1, "gpuMem": 10000, "memoryLimit": "4Gi" } ``` - **Result:** Values were accepted and stored exactly as provided. No chart defaults were merged into the stored representation (e.g., `shmSize: "8Gi"` from chart defaults is absent). ### Method 2: `valuesYaml` string field only (vllm-values-yaml) - **Deployment:** ✅ Success (status: pending-install, no errors) - **Submitted valuesYaml:** ```yaml resources: cpuRequest: 4 gpuLimit: 1 gpuMem: 10000 memoryLimit: "8Gi" model: huggingfaceName: "Qwen/Qwen2.5-0.5B-Instruct" ``` - **Stored values (parsed and stored in DB):** ```json { "cpuRequest": 4, "gpuLimit": 1, "gpuMem": 10000, "memoryLimit": "8Gi" } ``` - **Result:** The YAML string was correctly parsed into the structured `values` field in the database. YAML parsing works correctly. ### Method 3: Both `values` JSON AND `valuesYaml` with conflict (vllm-conflict-test) - **Deployment:** ✅ Success (status: pending-install, **no error or warning returned**) - **`values` JSON submitted:** ```json { "cpuRequest": 4, "memoryLimit": "8Gi", "huggingfaceName": "Qwen/Qwen2.5-0.5B-Instruct" } ``` - **`valuesYaml` submitted:** ```yaml resources: cpuRequest: 2 memoryLimit: "4Gi" model: huggingfaceName: "Qwen/Qwen2.5-7B-Instruct" ``` - **Stored values:** ```json { "cpuRequest": 4, "gpuLimit": 1, "gpuMem": 10000, "memoryLimit": "8Gi", "huggingfaceName": "Qwen/Qwen2.5-0.5B-Instruct" } ``` - **Result:** The `values` JSON field **won every conflict**. The `valuesYaml` values (`cpuRequest: 2`, `memoryLimit: "4Gi"`, `Qwen/Qwen2.5-7B-Instruct`) were completely overridden by the `values` JSON values (`cpuRequest: 4`, `memoryLimit: "8Gi"`, `Qwen/Qwen2.5-0.5B-Instruct`). No error or warning was presented to the user. ### Method 4: No values (chart defaults, vllm-defaults-test) - **Deployment:** ✅ Success (status: pending-install, no errors) - **Stored values:** ```json { "namespace": "ocdp-u-test-c" } ``` - **Result:** Only the auto-injected `namespace` was stored. Chart defaults (`cpuRequest: 8`, `memoryLimit: "16Gi"`, etc.) are not stored in the API response — they are resolved at Helm deploy time. --- ## Key Findings ### 1. Override Priority Order (when both fields provided) | Priority | Source | Description | |----------|--------|-------------| | **Highest** | `values` JSON field | Structured JSON object in the request body | | **Lowest** | `valuesYaml` string field | Raw YAML string in the request body | | **Baseline** | Chart built-in `values.yaml` | Default values packaged in the Helm chart | ### 2. Conflict Resolution When both `values` and `valuesYaml` are provided with conflicting values: - **`values` JSON wins** — the structured JSON field takes priority over the YAML string - **No error or warning** is returned to the user - The system silently prefers the `values` JSON field ### 3. `gpuMem=10000` Behavior - The integer value `10000` was **accepted without issues** in both `values` JSON and `valuesYaml` formats - No normalization or unit conversion was applied (stored as-is: `10000`) - Consistent with the project convention that `nvidia.com/gpumem` is treated as a vendor integer MB scalar ### 4. All values are stored in a unified `values` field in the DB Both `values` JSON and `valuesYaml` inputs are converted to a single structured `values` JSON object in the database. The API response always returns the structured `values` field regardless of how the input was provided. --- ## Recommendations 1. **Document the priority order** — users should know that when providing both `values` and `valuesYaml`, the `values` JSON field takes precedence and no error is raised. 2. **Consider returning a warning** when both fields are provided with conflicting values, as silent override could cause confusion. 3. **The naming convention** (`values` vs `valuesYaml`) can be misleading since both ultimately serve the same purpose. Consider deprecating one in the API to avoid ambiguity.