成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

需要避免的七個YAML陷阱

譯文
開發 前端
YAML是一種人類可讀的配置文件格式,它靈活且易于理解,但也充滿了意想不到的陷阱。本文將討論如何避免一些不穩定的問題。

?譯者 | 李睿

審校 | 孫淑娟  

YAML (“YAML Ain't Markup Language”)配置語言是許多現代應用程序的核心,包括Kubernetes、Ansible、CircleCI和Salt。YAML提供了許多優勢,例如可讀性、靈活性以及處理JSON文件的能力。但是對于沒有經驗或粗心的人來說,YAML也是一種陷阱或是陷阱的來源。

YAML行為的許多方面都考慮到了暫時的便利,但其代價是以后會出現意想不到的曲折或麻煩。即使是具有豐富組裝或部署YAML經驗的人也可能會被這些問題所困擾,這些問題通常以看似無害的行為的幌子而浮出水面。

可以采取以下七個步驟來防范YAML中最棘手的問題。

1.如有疑問,請引用字符串?

編寫YAML時可以采用的最強大的防御實踐:引用所有應為字符串的內容。

YAML最著名的怪癖之一是,可以編寫字符串而無需引用:

- movie:
title: Blade Runner
year: 1982

在這一示例中,鍵movie、title和year將被解釋為字符串,值Blade Runner也將被解釋為字符串。值1982將被解析為數字。

但是這里會發生什么?

- movie:
title: 1979
year: 2016

沒錯,電影片名將被解釋為一個數字。這甚至還不是可能發生的最糟糕的事情:

- movie:
title: No
year: 2012

這個標題被解釋為布爾值的幾率是多少?

如果想絕對確保鍵和值將被解釋為字符串,并防止任何潛在的歧義(很多歧義可能會潛入YAML),請引用字符串:

- "movie":
"title": "Blade Runner"
"year": 1982

如果由于某種原因無法引用字符串,則可以使用速記前綴來指示類型。這些使YAML比引用的字符串讀起來更嘈雜,但它們與引用一樣明確:

movie: !!str Blade Runner

2.當心多行字符串

YAML有多種方式來表示多行字符串,具體取決于這些字符串的格式。例如,當前綴為“>”時,未加引號的字符串可以簡單地跨多行斷開:

long string: >
This is a long string
that spans multiple lines.

需要注意的是,使用>會自動在字符串末尾附加一個\n。如果不想要尾隨的新行,使用>-而不是>。

如果使用帶引號的字符串,則需要在每個換行符前加上反斜杠:

long string: "This is a long string \
that spans multiple lines."

需要注意的是,換行符后的任何空格都被解釋為YAML格式,而不是字符串的一部分。這就是上例中在反斜杠之前插入空格的原因。

3.小心布爾值

正如上面所暗示的,YAML的另一個大問題之一是布爾值。在YAML中有很多方法可以指定布爾值,因此很容易將預期的字符串解釋為布爾值。

一個臭名昭著的例子是兩位數的國家代碼問題。如果你所在的國家/地區是美國或英國,則是YES。如果所在的國家是挪威,其國家代碼是NO,則它不再是一個字符串,而是一個計算結果為false的布爾值!

只要有可能,特意使用布爾值和可能被誤解為布爾值的較短字符串。YAML的布爾值速記前綴是!!bool。

4.注意多種形式的八進制

多種形式的八進制是一個不為人知的問題,但它可能很麻煩。YAML 1.1對八進制數使用了與YAML 1.2不同的符號。在YAML 1.1中,八進制數看起來像0777。在YAML1.2中,相同的八進制數變成0o777。這樣就不那么模棱兩可了。

Kubernetes是YAML的最大用戶之一,它使用YAML1.1。如果將YAML與使用規范1.2版的其他應用程序一起使用,特別注意不要使用錯誤的八進制表示法。由于如今八進制通常僅用于文件權限,因此與其他YAML陷阱相比,這是一個極端情況。盡管如此,如果不小心,YAML八進制可能會帶來麻煩。

5.小心可執行的YAML

可執行YAML?是的,有許多YAML庫,例如Python的PyYAML,在反序列化YAML時允許執行任意命令。令人驚訝的是,這不是一個bug,而是YAML設計允許的功能。

在PyYAML的情況下,反序列化的默認行為最終被更改為只支持不允許這種事情的安全YAML子集。原始行為可以進行人工恢復,但如果可以,應該避免使用這一功能,如果尚未禁用,則應默認禁用這一功能。

6.序列化和反序列化時要注意不一致

YAML的另一個潛在問題是, 跨不同編程語言的不同YAML處理庫有時會產生不同的結果。

需要考慮的是:如果有一個包含表示為true和false的布爾值的YAML文件,并且使用一個不同的庫將其重新序列化為YAML,該庫表示布爾值為y和n或on和off,可能會得到意想不到的結果。即使代碼在功能上保持不變,它也可能看起來完全不同。

7.不要使用YAML

避免YAML問題的通用方法是什么?不要使用它。或者至少不要直接使用它。

如果必須作為配置過程的一部分編寫YAML,則更安全的做法是使用JSON或原生代碼(例如Python字典)編寫代碼,然后將其序列化為YAML。可以更好地控制對象的類型,并且可以更自如地使用已經使用過的語言。

如果做不到這一點,可以使用yamllint之類的linter來檢查常見的YAML問題。例如,可以禁止像YES或off這樣的真值,以支持簡單的true和false,或者強制字符串引用。

原文鏈接:https://www.infoworld.com/article/3669238/7-ugly-yaml-gotchas-to-avoid-and-how-to-avoid-them.html

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2016-02-23 09:23:50

swift陷阱解決方法

2023-01-31 08:00:00

開源開發軟件

2021-12-21 11:16:04

云計算云計算環境云應用

2021-11-30 13:59:22

數據治理大數據數據分析

2023-05-06 10:50:41

IT培訓IT團隊

2022-01-11 10:50:35

數據治理CIOIT領導

2021-12-10 10:37:51

數字化轉型企業技術服務

2021-12-13 11:48:53

IT領導者CIO技術

2022-01-14 10:46:57

ITIT領導IT管理

2018-11-18 16:31:14

Kubernetes監控容器

2023-01-31 09:31:46

IT領導趨勢

2023-05-11 09:06:50

錯誤IT培訓

2010-08-30 13:38:10

CSS

2022-04-20 12:06:10

漏洞Java應用程序黑客

2022-07-29 11:03:03

Kubernetes應用安全

2023-08-01 10:41:27

分派IT工作CIO

2022-06-27 14:03:06

IT治理首席信息官

2011-02-22 10:23:34

2020-03-23 10:59:52

CISO網絡安全漏洞

2023-11-30 13:13:14

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美亚洲国产一区二区三区 | 国产欧美日韩精品一区 | 你懂的国产 | 欧美午夜一区二区三区免费大片 | 狠狠爱一区二区三区 | 操久久 | 99精品久久99久久久久 | av在线一区二区三区 | 黄色网页在线观看 | 九九亚洲 | 精品国产一区二区三区久久久久久 | 深夜福利亚洲 | 久久久久一区二区三区四区 | 亚洲精品国产偷自在线观看 | 久久久久久免费看 | 狠狠涩 | 亚洲精品大全 | 成人美女免费网站视频 | 一区二视频| 国产传媒在线播放 | 午夜精品久久久久久久久久久久久 | 婷婷免费视频 | 黄色欧美视频 | 99久久精品国产一区二区三区 | 中文字幕在线观看日韩 | 成人av鲁丝片一区二区小说 | 久久这里只有精品首页 | 欧美一区二区三区 | 成人免费日韩 | 午夜久久久| 国产精品免费观看视频 | 国产视频综合 | 国产精品视频免费观看 | 国产欧美一级二级三级在线视频 | 在线播放日韩 | 一区二区三区 在线 | 亚洲免费视频一区二区 | 亚洲免费一区二区 | 亚洲欧洲成人在线 | 精品久久一区 | 在线精品一区 |