ไทย

เครื่องมือสำหรับนักพัฒนา · Docker เรียกใช้ตัวแปลงการเขียน Docker

YAML ได้รับในไฟล์เขียน: การอ้างอิง ปัญหานอร์เวย์ และ 22:22

· พื้นหลัง

docker เขียน yaml

แผนภาพนามธรรมที่แสดง yaml gotchas ในไฟล์เขียน: การอ้างอิง ปัญหานอร์เวย์ และ 22:22
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

ไฟล์เขียนคือ YAML และ YAML มีความคิดเห็นเกี่ยวกับค่าเปล่า โพสต์นี้จะอธิบายกฎการแยกวิเคราะห์เบื้องหลังสิ่งที่น่าประหลาดใจที่พบบ่อยที่สุด และวิธีการตรวจสอบ YAML ที่สร้างขึ้นหรือเขียนด้วยลายมือ

COUNTRY=NO กลายเป็นเท็จ — ไฟล์เขียนส่งผ่านบูลีนโดยที่แอปต้องการรหัสตัวอักษรสองตัว

COUNTRY=NO กลายเป็นเท็จ — ไฟล์เขียนส่งผ่านบูลีนโดยที่แอปต้องการรหัสตัวอักษรสองตัว หลักฐาน: ค่าที่เหมือน NO เปลือยสามารถพิมพ์ซ้ำได้โดยตัวแยกวิเคราะห์ สร้างความปลอดภัยสเกลาร์ yaml ด้วยตัวอักษรแบบใช้แล้วทิ้ง จับคู่แหล่งที่มาแต่ละรายการกับลำดับการจับคู่ค่าที่ยกมา สำรอง parser พิมพ์สำหรับการตรวจสอบปลายทาง

เหตุการณ์ yaml ยังเผยให้เห็นว่า ขอบเขตเหตุการณ์ yaml ที่แยกจากกันคือสตริงตัวเลขฐานสิบหกที่ดูเป็นรูปแปดเหลี่ยมและสตริงรูปวันที่ถูกยกมา หลักฐาน: มีการอ้างอิงสตริงตัวเลขฐานสิบหกและรูปวันที่ที่ดูเป็นรูปแปดเหลี่ยม ข้อจำกัดด้านความปลอดภัยสเกลาร์ yaml นี้เป็นจุดหยุด ตรวจสอบลำดับแมปค่าที่ยกมาโดยไม่มีพฤติกรรมการผลิต จากนั้นบันทึกการตรวจสอบโฮสต์สำหรับการพิมพ์พาร์เซอร์

YAML 1.1 สเกลาร์ - การไม่มีเครื่องหมายคำพูด ใช่ ไม่ใช่ เปิด ปิด และ NO กลายเป็นบูลีนใน parsers จำนวนมาก

YAML 1.1 สเกลาร์ - การไม่มีเครื่องหมายคำพูด ใช่ ไม่ใช่ เปิด ปิด และ NO กลายเป็นบูลีนใน parsers จำนวนมาก หลักฐาน: สงวนไว้ใช่ไม่ใช่บนปิดบูลีนและการสะกดคำว่างจะถูกยกมา ติดตามโทเค็นความปลอดภัยของสเกลาร์ yaml ลงในลำดับแมปค่าที่ยกมา แยกค่าที่เรียงลำดับออกจากฟิลด์ค่าสุดท้าย การพิมพ์ parser อยู่นอกคอลเล็กชัน

ขอบเขตกลไก yaml ที่เกี่ยวข้องคือ ขอบเขตไวยากรณ์ yaml ที่แยกจากกันคือแผนที่ใช้ช่องว่างสองช่องและอาร์เรย์ใช้รายการเส้นประ หลักฐาน: แผนที่ใช้ช่องว่างสองช่องและอาร์เรย์ใช้รายการเส้นประ ใช้ข้อเท็จจริงด้านความปลอดภัยของสเกลาร์ yaml นี้เพื่อคาดการณ์สมาชิกหนึ่งรายหรือสเกลาร์ในลำดับแมปค่าที่ยกมา ตรวจสอบคำเตือนก่อนที่จะตัดสินใจอะไรเกี่ยวกับการพิมพ์ของ parser

พอร์ต Sexagesimal — เหตุใด 22:22 ที่ไม่มีเครื่องหมายคำพูดจึงสามารถแยกวิเคราะห์เป็นจำนวนเต็ม 1342 และเหตุใดเอกสาร Compose จึงพูดถึงการเสนอราคาพอร์ต

พอร์ต Sexagesimal — เหตุใด 22:22 ที่ไม่มีเครื่องหมายคำพูดจึงสามารถแยกวิเคราะห์เป็นจำนวนเต็ม 1342 และเหตุใดเอกสาร Compose จึงพูดถึงการเสนอราคาพอร์ต หลักฐาน: สตริงพอร์ตโคลอนตัวเลขได้รับเครื่องหมายคำพูดเดี่ยว ตัดสินการจัดลำดับความปลอดภัยของสเกลาร์ yaml จากแบบจำลอง การอ้างอิงในลำดับการแมปค่าที่ยกมาจะปกป้องประเภทต่างๆ แต่ไม่มีการพิสูจน์การดำเนินการสำหรับการพิมพ์ parser

การสังเกตการทำให้เป็นอนุกรม yaml ครั้งที่สองคือขอบเขตเอาต์พุต yaml ที่แยกต่างหากคือตัวอย่าง quoteYamlString โดยตรงเปิดเผยการตัดสินใจของผู้เขียน หลักฐาน: ตัวอย่าง quoteYamlString โดยตรงเปิดเผยการตัดสินใจของผู้เขียน เอาต์พุตความปลอดภัยสเกลาร์ yaml นี้แยกการตั้งค่าออกจากบริบทที่ไม่พร้อมใช้งาน ให้ลำดับการแมปค่าที่ยกมาสามารถตรวจสอบได้ และตรวจสอบการพิมพ์ของพาร์เซอร์อย่างอิสระ

ศูนย์นำหน้าและฐานแปด - ค่าเช่น 0755 และสตริงเวอร์ชันที่ YAML ตีความใหม่

ศูนย์นำหน้าและฐานแปด — ค่าเช่น 0755 และสตริงเวอร์ชันที่ YAML ตีความใหม่ หยุดที่ข้อยกเว้นด้านความปลอดภัยสเกลาร์ yaml แทนที่จะคาดเดา การเพิ่มลำดับแผนที่ค่าที่ยกมาใดๆ จำเป็นต้องมีเหตุผลเฉพาะการปรับใช้ที่เชื่อมโยงกับการพิมพ์ของ parser

ข้อจำกัดข้อยกเว้น yaml อีกประการหนึ่งคือ ขอบเขตข้อยกเว้น yaml ที่แยกต่างหากคือส่วนขยายจุดยึดและการแยกวิเคราะห์ YAML ทั่วไปอยู่นอกซีเรียลไลเซอร์นี้ หลักฐาน: ส่วนขยายจุดยึดและการแยกวิเคราะห์ YAML ทั่วไปอยู่นอกซีเรียลไลเซอร์นี้ เก็บคำสั่งความปลอดภัยสเกลาร์ yaml ดั้งเดิมไว้ข้างๆ คำเตือน การเปรียบเทียบจะแสดงลำดับการแมปค่าที่ยกมาและการตัดสินใจพิมพ์พาร์เซอร์ใดที่ยังคงเป็นแบบแมนนวล

การเยื้องและรายการ - แบบแผนสองช่องว่าง แสดงรายการภายใต้คีย์ และรูปแบบสภาพแวดล้อมระหว่างแผนที่กับรายการ:

การเยื้องและรายการ - แบบแผนสองช่องว่าง แสดงรายการภายใต้คีย์ และรูปแบบสภาพแวดล้อมระหว่างแผนที่กับรายการ: สร้างตัวอย่างความปลอดภัยของสเกลาร์ yaml จากชื่อสังเคราะห์ ทำให้ทุกค่าที่ยกมาแมปรายการลำดับที่สามารถตรวจสอบย้อนกลับได้ โดยไม่เปิดเผยรายละเอียดการพิมพ์ของตัวแยกวิเคราะห์ที่ใช้งานจริง

ตัวอย่างตัวอย่าง yaml เดียวกันแสดงให้เห็นว่า ขอบเขตตัวอย่าง yaml ที่แยกจากกันคือ การอ้างอิงการป้องกันจะปกป้องเซ็ตย่อยที่ปล่อยออกมาเท่านั้น หลักฐาน: การอ้างอิงเชิงป้องกันจะปกป้องเซ็ตย่อยที่ปล่อยออกมาเท่านั้น ข้อเท็จจริงด้านความปลอดภัยสเกลาร์ yaml ที่จับคู่ควรมองเห็นได้ในลำดับแมปค่าที่ยกมา บันทึกบรรทัดนั้นและหลีกเลี่ยงสมมติฐานเกี่ยวกับการพิมพ์ของ parser

ตัวอย่างการทำงาน: การแก้ไขไฟล์ที่เสียหายด้วยมือ — การรัน docker compose config เพื่อดูว่า parser สร้างอะไรขึ้นมาจริงๆ

ตัวอย่างการทำงาน: การแก้ไขไฟล์ที่เสียหายด้วยมือ — การรัน docker compose config เพื่อดูว่า parser สร้างอะไรขึ้นมาจริงๆ แปลผลลัพธ์ด้านความปลอดภัยสเกลาร์ yaml ให้เป็นค่าที่ยกมาซึ่งสังเกตได้ค่าเดียวจะแมปลำดับความแตกต่าง นักเทียบท่าเป็นเจ้าของคำตัดสินการพิมพ์ parser ในภายหลัง

การใช้ผลลัพธ์ yaml ยังแสดงขอบเขตเอฟเฟกต์ yaml ที่แยกจากกันคือค่าที่เหมือน NO เปลือยสามารถพิมพ์ซ้ำได้โดย parsers แยกความรับผิดชอบด้านความปลอดภัยสเกลาร์ yaml: การแปลงเขียนลำดับแมปค่าที่ยกมา พื้นที่เก็บข้อมูลจะลบความลับ และผู้ดำเนินการตรวจสอบการพิมพ์ของพาร์เซอร์

สิ่งนี้ไม่ครอบคลุม — YAML แองเคอร์, ฟิลด์ส่วนขยาย (x-*) และข้อกำหนด YAML 1.2 แบบเต็ม

สิ่งนี้ไม่ครอบคลุม — YAML แองเคอร์, ฟิลด์ส่วนขยาย (x-*) และข้อกำหนด YAML 1.2 แบบเต็ม จำกัดขอบเขตความปลอดภัยของสเกลาร์ yaml ไว้ที่ค่าที่ยกมาแมปลำดับสาขาที่แสดงที่นี่ แบบฟอร์มใกล้เคียงและค่าเริ่มต้นไม่สามารถตอบคำถามการพิมพ์ของ parser ได้

ขีดจำกัดขอบเขต yaml อีกหนึ่งรายการต่อจากขอบเขตขีดจำกัด yaml ที่แยกจากกันคือ สงวนไว้ว่าใช่ ไม่ใช่ เมื่อปิดบูลีนและการสะกดแบบโมฆะจะถูกยกมา ถือว่าขอบเขตความปลอดภัยของสเกลาร์ yaml นี้เป็นข้อยกเว้น ต้องการลำดับการจับคู่ค่าที่ยกมาอย่างถูกต้องมากกว่าการเดาเกี่ยวกับการพิมพ์ของพาร์เซอร์

Takeaway: อ้างอิงสิ่งใดก็ตามที่ไม่ใช่สตริงอย่างชัดเจน - และเปรียบเทียบ YAML ที่เขียนด้วยลายมือกับเอาต์พุตของตัวแปลงเพื่อจับค่าเปล่า

ประเด็นสำคัญ: อ้างอิงสิ่งใดก็ตามที่ไม่ใช่สตริงอย่างชัดเจน และเปรียบเทียบ YAML ที่เขียนด้วยลายมือกับเอาต์พุตของตัวแปลงเพื่อจับค่าเปล่า ตรวจสอบความปลอดภัยของสเกลาร์ yaml เป็นตัวเลือกแหล่งที่มา ฟิลด์โมเดล ค่าที่ยกมาแมปบรรทัดลำดับและคำเตือน ลบความลับก่อนที่จะตรวจสอบการพิมพ์ของพาร์เซอร์

สุดท้ายนี้ แหล่งที่มาของ Takeaway ของ yaml ยืนยันขอบเขตการตัดสินใจของ yaml ที่แยกต่างหากคือสตริงพอร์ตโคลอนที่เป็นตัวเลขจะได้รับเครื่องหมายคำพูดเดี่ยว ปิดความปลอดภัยของสเกลาร์ yaml อย่างหวุดหวิด: ลำดับแผนที่ค่าที่ยกมาเป็นตัวเลือก ไม่รับประกันการพิมพ์ parser และการเทียบเท่าของเชลล์