k8s使用了YAML格式進(jìn)行容器編排,因此這里來(lái)詳細(xì)學(xué)習(xí)一下YAML文件的基本規(guī)則厢蒜。
本文介紹 YAML 的語(yǔ)法轻纪,可以使用在線網(wǎng)站進(jìn)行驗(yàn)證YAML驗(yàn)證 。
簡(jiǎn)介
它的基本語(yǔ)法規(guī)則:
- 大小寫(xiě)敏感
- 使用縮進(jìn)表示層級(jí)關(guān)系
- 縮進(jìn)時(shí)不允許使用Tab鍵催植,只允許使用空格肮蛹。
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
- # 表示注釋?zhuān)瑥倪@個(gè)字符一直到行尾创南,都會(huì)被解析器忽略伦忠。
YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種:
- 對(duì)象:鍵值對(duì)的集合,又稱(chēng)為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數(shù)組:一組按次序排列的值稿辙,又稱(chēng)為序列(sequence) / 列表(list)
- 純量(scalars):?jiǎn)蝹€(gè)的昆码、不可再分的值
以下分別介紹這三種數(shù)據(jù)結(jié)構(gòu)。
對(duì)象
對(duì)象的一組鍵值對(duì),使用冒號(hào)結(jié)構(gòu)表示赋咽。
YAML | JSON |
---|---|
animal: pets | { animal: 'pets' } |
YAML也允許另一種寫(xiě)法旧噪,將所有鍵值對(duì)寫(xiě)成一個(gè)行內(nèi)對(duì)象。
YAML | JSON |
---|---|
hash: { name: Steve, foo: bar } | { hash: { name: 'Steve', foo: 'bar' } } |
數(shù)組
一組連詞線開(kāi)頭的行冬耿,構(gòu)成一個(gè)數(shù)組舌菜。
YAML | JSON |
---|---|
- Cat - Dog - Goldfish |
[ 'Cat', 'Dog', 'Goldfish' ] |
數(shù)據(jù)結(jié)構(gòu)的子成員是一個(gè)數(shù)組,則可以在該項(xiàng)下面縮進(jìn)一個(gè)空格亦镶。
YAML | JSON |
---|---|
- ??- Cat ??- Dog ??- Goldfish |
[ [ 'Cat', 'Dog', 'Goldfish' ] ] |
數(shù)組也可以采用行內(nèi)表示法日月。
YAML | JSON |
---|---|
animal: [Cat, Dog] | { animal: [ 'Cat', 'Dog' ] } |
純量
純量是最基本的、不可再分的值缤骨。
- 整數(shù)
- 浮點(diǎn)數(shù)
- 布爾值
- null
- 字符串
數(shù)值直接以字面量的形式表示
YAML | JSON |
---|---|
number: 12.30 | { number: 12.30 } |
最新標(biāo)準(zhǔn)里 y / Y / yes / Yes / YES / n / N / no / No / NO / true / True / TRUE / false / False / FALSE / on / On / ON / off / Off / OFF 全部都會(huì)被解析成正確的 bool 類(lèi)型爱咬,為了兼容性比較好建議用 true 和 false。
YAML | JSON |
---|---|
isSet: true | { isSet: true } |
YAML 允許使用兩個(gè)感嘆號(hào)绊起,強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類(lèi)型精拟。
YAML | JSON |
---|---|
e: !!str 123 f: !!str true |
{ e: '123', f: 'true' } |
~ / null / Null / NULL 還有空字符都被解析成 null 類(lèi)型,最標(biāo)準(zhǔn)的寫(xiě)法是 ~虱歪。
YAML | JSON |
---|---|
e: ~ | { e: null } |
字符串
字符串是最常見(jiàn)蜂绎,也是最復(fù)雜的一種數(shù)據(jù)類(lèi)型。
字符串默認(rèn)不使用引號(hào)表示笋鄙。
YAML | JSON |
---|---|
str: 這是一行字符串 | { str: '這是一行字符串' } |
如果字符串之中包含空格或特殊字符师枣,需要放在引號(hào)之中。
YAML | JSON |
---|---|
str: '內(nèi)容: 字符串' | { str: '內(nèi)容: 字符串' } |
單引號(hào)和雙引號(hào)都可以使用萧落,雙引號(hào)不會(huì)對(duì)特殊字符轉(zhuǎn)義践美。
YAML | JSON |
---|---|
s1: '內(nèi)容\n字符串' s2: "內(nèi)容\n字符串" |
{ s1: '內(nèi)容\\n字符串', s2: '內(nèi)容\n字符串' } |
單引號(hào)之中如果還有單引號(hào),必須連續(xù)使用兩個(gè)單引號(hào)轉(zhuǎn)義找岖。
YAML | JSON |
---|---|
str: 'labor''s day' | { str: 'labor's day' } |
字符串可以寫(xiě)成多行陨倡,從第二行開(kāi)始,必須有一個(gè)單空格縮進(jìn)许布。換行符會(huì)被轉(zhuǎn)為空格兴革。
YAML | JSON |
---|---|
str: 這是一段 ?多行 ?字符串 |
{ str: '這是一段 多行 字符串' } |
多行字符串可以使用|保留換行符,也可以使用>折疊換行蜜唾。
YAML | JSON |
---|---|
this:| ?Foo ?Bar that: > ?Foo ?Bar |
this: 'Foo\nBar\n', that: 'Foo Bar\n' } |
+表示保留文字塊末尾的換行帖旨,-表示刪除字符串末尾的換行。
YAML | JSON |
---|---|
s1:| ?Foo s2:|+ ?Foo s3:|- ?Foo |
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' } |
復(fù)合結(jié)構(gòu)
對(duì)象和數(shù)組可以結(jié)合使用灵妨,形成復(fù)合結(jié)構(gòu)解阅。
YAML | JSON |
---|---|
languages: - Ruby - Perl - Python websites: ??YAML: yaml.org ??Ruby: ruby-lang.org ??Python: python.org ??Perl: se.perl.org |
{ languages: [ 'Ruby', 'Perl', 'Python' ], ??websites: ?? { YAML: 'yaml.org', ???? Ruby: 'ruby-lang.org', ?????Python: 'python.org', ???? Perl: 'use.perl.org' } } |
引用
錨點(diǎn)&和別名*友扰,可以用來(lái)引用管引。
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
等同于下面的代碼。
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
&用來(lái)建立錨點(diǎn)(defaults)蒲跨,<<表示合并到當(dāng)前數(shù)據(jù),*用來(lái)引用錨點(diǎn)蟹地。
下面是另一個(gè)例子积暖。
YAML | JSON |
---|---|
- &showell Steve - Clark - Brian - Oren - *showell |
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ] |