ansible中yaml语法应用
4、yaml語(yǔ)法應(yīng)用
ansible的playbook編寫(xiě)是yaml語(yǔ)言編寫(xiě),掌握yaml語(yǔ)法是編寫(xiě)playbook的必要條件,格式要求和Python相似,具體教程參考如下
yaml語(yǔ)言教程
附上一個(gè)yaml文件轉(zhuǎn)js格式文件鏈接
在線免費(fèi)yaml內(nèi)容轉(zhuǎn)json格式
4.1、 ansible中的yaml語(yǔ)法應(yīng)用
ansible中yaml語(yǔ)法和上述教程大同小異,以下是個(gè)人簡(jiǎn)化和總結(jié):
基本語(yǔ)法規(guī)則如下
以 "---" 開(kāi)頭
大小寫(xiě)敏感
使用縮進(jìn)表示層級(jí)關(guān)系
縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格
縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
'#'?號(hào)表示注釋,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略;可以在一行的中間使用,注釋 # 之后的內(nèi)容。關(guān)于注釋,需要注意是不是任意位置都能使用,當(dāng)分行寫(xiě)時(shí),不能放在分行的所在行
YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種:
對(duì)象:鍵值對(duì)的集合,又稱(chēng)為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
數(shù)組:一組按次序排列的值,又稱(chēng)為序列(sequence) / 列表(list),以 "- " 開(kāi)頭,有空格間隔
純量(scalars):單個(gè)的、不可再分的值(ansible中很少用到)
4.2、對(duì)象簡(jiǎn)介
ansible中yaml對(duì)象和計(jì)算機(jī)的中是"key-value"數(shù)據(jù)結(jié)構(gòu)相似,只是表達(dá)的方式不同,在ansible中,對(duì)可以采用兩種表達(dá)方式。切記 : (冒號(hào))之后一定要加空格,否則報(bào)錯(cuò)
# 多行式 host: localhost remote_user: root # 行內(nèi)式,也稱(chēng)為單行式,兩邊是大括號(hào)包圍 { host: localhost, remote_user: root }注意
- 在一行表示中,字典的值,可以嵌套其他字典,但是需要用引號(hào)包圍起來(lái)代表一個(gè)整體值,返回的是整體而且不是直接嵌套字典,下面引號(hào)部分會(huì)給實(shí)際案例解釋。
- 冒號(hào)加空格加內(nèi)容即": haha"這個(gè)格式代表的是字典的表達(dá)式,這個(gè)是yaml語(yǔ)法規(guī)定的;冒號(hào)加內(nèi)容即":haha",代表的是普通的表達(dá)式,沒(méi)有特殊意義,所以定義對(duì)象需要注意,但是這種普通表達(dá)式,有一些情況會(huì)用到,例如下文中引號(hào)的例子中
4.3、數(shù)組簡(jiǎn)介
在ansible中數(shù)組也稱(chēng)為列表,以 "- " 開(kāi)頭,有空格間隔,同樣有兩種表達(dá)方式。
# 多行式 - shell - copy # 單行式,內(nèi)聯(lián)式,兩邊用中括號(hào)包圍 [shell, copy]4.4、分行寫(xiě)
playbook中的分行寫(xiě)支持三種格式,分別是:
在"key"之后使用 "|", 表示保留換行
在"key"之后使用 ">" ,表示折疊換行
采用多行縮進(jìn)格式,建議從縮進(jìn)的第二行用 四個(gè) 空格表示縮進(jìn)。需要注意注釋的位置
運(yùn)行效果圖
4.5、向模塊傳遞參數(shù)
模塊的參數(shù)?般來(lái)說(shuō)是key=value格式的,有3種傳遞的?式:
直接寫(xiě)在模塊后,此時(shí)要求使?"key=value"格式。這是讓ansible內(nèi)部去解析字符串。因?yàn)榭煞?寫(xiě),所以有多種寫(xiě)法
寫(xiě)成字典型,即"key: value"。此時(shí)要求多層縮進(jìn)。這是讓yaml去解析字典。shell和command模塊不能使用這種格式
使?內(nèi)置屬性args,然后多層縮進(jìn)定義參數(shù)列表。這是讓ansible明確指定?yaml來(lái)解析
4.6、playbook中的引號(hào)使用
引號(hào)的作用,可以將一個(gè)字典中的value值表達(dá)式當(dāng)作整體返回,這個(gè)表達(dá)式里面可以嵌套字典,playbook中定義的都是些列表和字典。絕?多數(shù)時(shí)候,都不需要使?引號(hào),但有兩個(gè)特殊情況需要考慮使?引號(hào)
出現(xiàn)?括號(hào)"{}"
值(value)出現(xiàn)冒號(hào)加空格時(shí)": ",即嵌套字典時(shí),需要將嵌套的部分用引號(hào)當(dāng)作整體返回
解釋
式括起來(lái),因此需要用單引號(hào)將整個(gè)表達(dá)式括起來(lái),用整體當(dāng)作一個(gè)值賦值給模塊。理解這兩點(diǎn)剩下的模塊也是一樣的意思
4.7、playbook和play的關(guān)系
?個(gè)playbook中可以包含多個(gè)play。每個(gè)play都?少包含有tasks和hosts這兩項(xiàng),還可以包含其他?必須項(xiàng),如vars,vars_f iles,remote_user等。tasks中可以通過(guò)模塊調(diào)?定義?系列的action。只不過(guò),絕?多數(shù)時(shí)候,?個(gè)playbook都只定義?個(gè)play,這樣做的好處是便于維護(hù)。
playbook文件中基本結(jié)構(gòu)為:
playbook: [play1, play2, play3]
play: [hosts, gather_facts, connection, become, remote_user, tasks, vars...]
tasks: [變量vars、循環(huán)with_xxx、判斷when、命名name、module1, module2,...]
需要注意的是,當(dāng)play使用了role時(shí),看上去沒(méi)有tasks和hosts選項(xiàng),實(shí)際上role里面包含了,所以有沒(méi)有tasks和hosts沒(méi)關(guān)系,但沒(méi)有使用role時(shí),一定要有
4.8、yaml編寫(xiě)總結(jié)
轉(zhuǎn)載于:https://www.cnblogs.com/AutoSmart/p/10273164.html
總結(jié)
以上是生活随笔為你收集整理的ansible中yaml语法应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: react学习(39)----react
- 下一篇: 万物互联之~RPC专栏