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