เกริ่นเรื่อง YAML นิดหน่อย
เวลาที่เราเขียน YAML ไฟล์ นั่งคือเราตั้งในส่งข้อมูลในรูปแบบของ key & value ไปยังคนอื่นที่ต้องการข้อมูลจากเรา โดยที่ key กับ value จะคั่นด้วย ": " (colon space) หน้าตาก็จะเป็นแบบนี้ key: value
ซึ่งค่าของ value จำเป็น word, number หรือ string ได้หมดไม่ติดอะไร
ฉุกคิด
ถ้าโลกเรียบง่ายอย่างนี้คงไม่มีอะไร เพราะว่าจากตัวอย่างค่าของ motto จะเป็นค่าที่เหมือนกันหมดคือประโยคที่ว่า The way we win matter
---
motto: The way we win matter
motto: "The way we win matter"
motto: 'The way we win matter'
...
แล้วถ้าประโยคของเราเป็นแบบนี้ล่ะ จะเกิดอะไรขึ้นประโยคที่เราจะใส่ไปในค่าใน YAML เป็นแบบนี้
What is the meaning of \t in the context of escape characters?
---
question: What is the meaning of \t in the context of escape characters?
question: "What is the meaning of \t in the context of escape characters?"
question: 'What is the meaning of \t in the context of escape characters?'
...
หาคำตอบ
ผมเลือกใช้ Kubernetes เป็นเครื่องมือในการทดสอบ ผมทดลองเอาประโยคทั้ง 3 รูปแบบไปใส่ไว้ใน ConfigMaps ชื่อข้อมูลว่า none, single, double จากนั้นผมก็จะนำเอา ข้อมูลใน ConfigMaps เหล่านั้นไปเขียนไว้ในไฟล์ใน Pods
> cat cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
data:
none: What is the meaning of \t in the context of escape characters?
double: "What is the meaning of \t in the context of escape characters?"
single: 'What is the meaning of \t in the context of escape characters?'
> cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: yaml-test
spec:
containers:
- name: mycon
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: myconfig
> kubectl apply -f cm.yaml -f pod.yaml
configmap/myconfig created
pod/yaml-test created
> kubectl exec -it yaml-test -- sh
# cat /etc/config/none
What is the meaning of \t in the context of escape characters?
# cat /etc/config/single
What is the meaning of \t in the context of escape characters?
# cat /etc/config/double
What is the meaning of in the context of escape characters?
ผลลัพธ์ที่ได้จะเห็นได้ว่าประโยคที่ไม่มี quote และ ประโยคที่ใช้ Single Quote จะได้ผลเหมือนกัน คือ escape character จะไม่ถูกตีความ แต่ว่า ประโยคที่ใช้ Double Quote ที่ตัวอักษร \t จะกลายเป็นช่องว่าที่เกิดจาก tab แทน นั่นหมายความว่า escape character ถูกตีความให้กลายเป็น tab