Open
Description
Describe the bug
Library uses a YAML parser compatible with YAML 1.2 only, when Kubernetes is mostly compatible with YAML 1.1 (https://kubernetes.io/docs/concepts/configuration/overview/#:~:text=YAML%201.2%20only%20recognizes%20true,cause%20unexpected%20errors%20or%20behaviors.)
Client Version
main
Server Version
1.31
To Reproduce
See example code below
Expected behavior
The value 0644
in the manifest is correctly recognized a an octal value with Kubernetes tools, but not with the function loadYaml
from this library
Example Code
import * as k8s from '@kubernetes/client-node';
import { EventType, State } from 'js-yaml';
const manifest = `
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: contour
name: contour
namespace: projectcontour
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
# This value of maxSurge means that during a rolling update
# the new ReplicaSet will be created first.
maxSurge: 50%
selector:
matchLabels:
app: contour
template:
metadata:
labels:
app: contour
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app: contour
topologyKey: kubernetes.io/hostname
weight: 100
containers:
- args:
- serve
- --incluster
- --xds-address=0.0.0.0
- --xds-port=8001
- --contour-cafile=/certs/ca.crt
- --contour-cert-file=/certs/tls.crt
- --contour-key-file=/certs/tls.key
- --config-path=/config/contour.yaml
command: ["contour"]
image: ghcr.io/projectcontour/contour:v1.30.2
imagePullPolicy: IfNotPresent
name: contour
ports:
- containerPort: 8001
name: xds
protocol: TCP
- containerPort: 8000
name: metrics
protocol: TCP
- containerPort: 6060
name: debug
protocol: TCP
livenessProbe:
httpGet:
path: /healthz
port: 8000
readinessProbe:
tcpSocket:
port: 8001
periodSeconds: 10
volumeMounts:
- name: contourcert
mountPath: /certs
readOnly: true
- name: contour-config
mountPath: /config
readOnly: true
env:
- name: CONTOUR_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
dnsPolicy: ClusterFirst
serviceAccountName: contour
securityContext:
runAsNonRoot: true
runAsUser: 65534
runAsGroup: 65534
volumes:
- name: contourcert
secret:
secretName: contourcert
- name: contour-config
configMap:
name: contour
defaultMode: 0644
items:
- key: contour.yaml
path: contour.yaml
`;
class MyKubernetesObjectApi extends k8s.KubernetesObjectApi {
public async getSerializationType(apiVersion?: string, kind?: string): Promise<string> {
return super.getSerializationType(apiVersion, kind);
}
}
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const client = MyKubernetesObjectApi.makeApiClient(kc) as MyKubernetesObjectApi;
const yml = k8s.loadYaml<k8s.KubernetesObject>(manifest);
client.create(yml).then(() => {
console.log('==> created');
}).catch((err: unknown) => {
console.error(err);
});
Environment (please complete the following information):
- OS: Mac
- Node.js version 22.16
Additional context
Related issue on js-yaml
library: nodeca/js-yaml#684
Metadata
Metadata
Assignees
Labels
No labels