kubernetes-client / kubernetes-client/javascript

KubernetesObjectApi drops `x-kubernetes-preserve-unknown-fields` when given a plain YAML object

Open
#2,962 1 comment 1 reaction 2 assignees Claimed by @brendandburns View on GitHub
Dominant language
TypeScript
Stars
2.3k
Forks
568
Avg merge
17h 57m
Merged PRs (30d)
41

Description

**Describe the bug**
`KubernetesObjectApi.create()` silently drops the CRD schema extension `x-kubernetes-preserve-unknown-fields` when given a plain JavaScript object parsed from YAML.

**Client Version**
`1.4.0`

**Server Version**
`1.34`

**To Reproduce**
```javascript
const yaml = require("js-yaml");
const k8s = require("@kubernetes/client-node");

async function main() {
const crd = yaml.load(`
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: foos.example.com
spec:
group: example.com
scope: Namespaced
names:
plural: foos
singular: foo
kind: Foo
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
podTemplate:
type: object
x-kubernetes-preserve-unknown-fields: true
`);
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
kc.setCurrentContext("orbstack");
const client = k8s.KubernetesObjectApi.makeApiClient(kc);

const result = await client.create(crd);
console.log(result.body)
}

main().then(() => console.log("done"));
```
the API server response does not contain x-kubernetes-preserve-unknown-fields.

**Expected behavior**
The API server response should retain x-kubernetes-preserve-unknown-fields: true, since it is present in the YAML input.

**Example Code**
Code snippet for what you are doing

**Environment (please complete the following information):**

- OS: [macOS]
- Node.js version [26.5.0]

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.