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"之后使用 ">" ,表示折疊換行
采用多行縮進格式,建議從縮進的第二行用 四個 空格表示縮進。需要注意注釋的位置

# 以下例子表示三種不同的分行寫格式,注意看區別
--- - hosts: lzcxtasks:- shell: echo 'Hello world' >> /tmp/test.txtcreates=/tmp/haha.txt            # 分行寫注意縮進,同時這行的注釋不能放到上一行,否則報錯- shell: |                                  # 冒號之后要有空格echo '張三' >> /tmp/test.txtecho '李四'  >> /tmp/test.txtargs:creates: /tmp/haha.txt- shell: >                                  # 大于號之后要有空格echo '王五' >> /tmp/test.txtcreates: /tmp/haha.txt

運行效果圖
分行寫

4.5、向模塊傳遞參數

模塊的參數?般來說是key=value格式的,有3種傳遞的?式:

直接寫在模塊后,此時要求使?"key=value"格式。這是讓ansible內部去解析字符串。因為可分?寫,所以有多種寫法
寫成字典型,即"key: value"。此時要求多層縮進。這是讓yaml去解析字典。shell和command模塊不能使用這種格式
使?內置屬性args,然后多層縮進定義參數列表。這是讓ansible明確指定?yaml來解析

# 參數的多種格式
---- hosts: lzcxtasks:- shell: echo '1' > /tmp/test.txt creates=/tmp/haha.txt  # 單行格式- shell: echo '2' >> /tmp/test.txtcreates=/tmp/haha.txt           # 多行格式,注意縮進,,同時這行的注釋不能放到上一行,否則報錯- shell: echo '3' >> /tmp/test.txtargs: creates: /tmp/haha.txt           # 使用內置args參數- shell: >echo '4' >> /tmp/test.txtcreates=/tmp/haha.txt           # 大于號多行縮進模式- shell: |echo '5.1' >> /tmp/test.txtecho '5.2' >> /tmp/test.txtargs:creates: /tmp/haha.txt- yum:name: dos2unixstate: installed

4.6、playbook中的引號使用

引號的作用,可以將一個字典中的value值表達式當作整體返回,這個表達式里面可以嵌套字典,playbook中定義的都是些列表和字典。絕?多數時候,都不需要使?引號,但有兩個特殊情況需要考慮使?引號

出現?括號"{}"
值(value)出現冒號加空格時": ",即嵌套字典時,需要將嵌套的部分用引號當作整體返回

# 附上一個綜合例子,注意每個模板內容的區別
---- hosts: localhosttasks:- shell: echo {{inventory_hostname}}:haha- shell: "echo {{inventory_hostname}}:haha"- shell: 'echo {{inventory_hostname}}:haha'- shell: 'echo "{{inventory_hostname}}: haha"'- shell: echo "{{inventory_hostname}}:haha"register: hello- debug: 'msg="{{hello.stdout}}: heihei"'- shell: echo {{inventory_hostname}}:haharegister: hello1- debug: msg={{hello1.stdout}}:heihei

解釋

  1. 前面三個shell模塊,字典的value都是普通的表達式,有引號和無引號,結果是一樣的,需要注意的是":"冒號之后沒有空格,而是直接跟上內容,這種表達式不是字典,實際上可以把這個冒號當作普通的字符串看待
  2. 第四個shell模塊中,因為value值嵌套了字典,而且還使用了大括號引用變量,這種表達式需要將整個表達
    式括起來,因此需要用單引號將整個表達式括起來,用整體當作一個值賦值給模塊。理解這兩點剩下的模塊也是一樣的意思
  3. 從打印的結果看,": "和":"的區別是,當字典的值嵌套了字典時,即使用": "時,打印也會按照這個格式打印,也就是冒號的下一個字符串是空格,而":"這個普通的格式則是跟上內容

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編寫總結

  1. 縮進:關于縮進,空格的多少無關,注重的是層級一致性,個人習慣縮進4或2個空格區分
  2. 對象的冒號:列表編寫,"-"加內容編寫完之后,換行時會自動對齊到"-"列,這是錯誤的,需要手動對齊"- "后的內容所在列,例如:tasks后添加冒號":"時,會自動對齊"-",實際上所有的冒號添加之后換行時,編輯器默認對齊上一行的第一個字符串位置,需要自行手動對齊
  3. 注釋:關于注釋,經測試,不能出現在對象的值value上,否則報錯。例如不能放tasks的冒號之后之后
---
- hosts: lzcxtasks:- shell: echo haha   # 注釋不能出現在task的冒號之后

轉載于:https://www.cnblogs.com/AutoSmart/p/10273164.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276149.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276149.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276149.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中興a2018拆機圖片_中興天機拆機步驟詳解【圖文】

中興天機上市時有兩款,黑色和白色。黑色的缺點是外觀過于傳統,并不是很適合年輕人使用,但是其推出白色款卻很好的解決了這個問題。中興天機的整體性質與性價比完美的拼過了 小米 3等同時上線的手機產品。中興天機價格在1799左右,小…

網絡視頻貼片廣告全面推行第三方監測

視頻網站優酷與國際調研機構尼爾森聯合對外宣布:針對優酷視頻貼片廣告全面推行第三方監測。這是視頻行業首次倡導廣告投放數據透明化的一大舉措。  近年來,網絡視頻已經成為廣告主營銷的一大選擇。隨著廣告主投放額度不斷加大,廣告主對視頻…

css3動畫事件—webkitAnimationEnd

轉載鏈接:http://www.jb51.net/css/72443.html 用css3的animation完成一個動畫,當只有這個動畫完成時才執行令一個事件,比如讓動畫保持在終止的狀態或其他一些事件。我們該怎么辦呢。 第一種方法: 用計時器,設定一個…

(送書和紅包)快人一步,掌握前端函數式編程

大家好,我是若川。上周末送出了3本新書和若干紅包,抽獎名單已公布。本周又爭取到了4本《前端函數式編程》書籍包郵送給大家,抽獎規則見文末,與以往不同的是除了關鍵詞、留言、在看抽獎外,還有最早關注獎,歡…

js split參數為無效字符_js使用split函數按照多個字符對字符串進行分割的方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":5,"count":5}]},"card":[{"des":"阿里云函數計算(Function Compute)是一個事件…

Windows下訪問VirtualBox的mysql服務

由于好長時間沒有在windows下使用mysql,現在出現好多選項,而且使用sqlyog連接總是出現1045錯誤,所以在虛擬機Ubuntu下安裝mysql進行訪問,但是想用win下面vscode進行開發,就有了Windows下訪問VirtualBox的mysql服務的想…

JavaScript操作表格進行拖拽排序

<js-dodo-table- Drag and Drop JQuery plugin>以上插件可對table進行排序&#xff0c;拖動&#xff01; 例如有下面一個樣子的id為table的表格&#xff1a; <table id"table"cellspacing"0"cellpadding"2"><tr id"1"…

UBUNTU 用戶及用戶組管理 修改用戶和主機名

轉載鏈接&#xff1a;http://blog.sina.com.cn/s/blog_66439a3e0101dm1g.html 一、用戶及用戶組管理 創建組&#xff1a; $sudo addgroup ccache 創建用戶&#xff1a; $sudo useradd ccache -g ccache -M 創新wfz用戶并創建HOME目錄&#xff0c;指定用戶組為ccache $sudo u…

ping -a 獲取不到主機名_網絡測試命令——PING

命令功能&#xff1a;Linux系統和windows系統的ping命令是常用的網絡命令&#xff0c;它通常用來測試與目標主機的連通性&#xff0c;這樣我們就可以根據它ping輸出的信息來確定目標主機是否可訪問(但這不是絕對的)。有些服務器為了防止通過ping探測到&#xff0c;通過防火墻設…

寫在2021: 值得關注/學習的前端框架和工具庫

前言最近在知乎看到了這么個問題&#xff1a;學完Vue還有必要學習React和Node嗎&#xff1f;[1]&#xff0c; 有很奇妙的感覺&#xff0c;因為我在最開始入門前端時&#xff0c;也是以Vue入的門&#xff0c;在“學完”Vue之后&#xff0c; 我也有了這個疑問&#xff0c;但當時的…

萬物互聯之~RPC專欄

3.RPC引入 上篇回顧&#xff1a;萬物互聯之~深入篇 Code&#xff1a;https://github.com/lotapp/BaseCode/tree/master/python/6.net/6.rpc/ 其他專欄最新篇&#xff1a;協程加強之~兼容答疑篇 | 聊聊數據庫~SQL環境篇 3.1.概念 RPC(Remote Procedure Call)&#xff1a;分布式系…

python判斷字符大小寫轉換_Python 字符串大小寫轉換的簡單實例

①所有字母都轉換為大寫# -*- coding:utf-8 -*-if __name__ "__main__":a hello, world!print(a.upper())輸出&#xff1a;HELLO, WORLD!②所有字母都轉換為小寫# -*- coding:utf-8 -*-if __name__ "__main__":a HELLO, WORLD!print(a.lower())輸出&am…

正則表達式如何匹配正反斜杠

轉載鏈接&#xff1a;http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#.E5.8F.8D.E6.96.9C.E6.9D.A0.E7.9A.84.E9.BA.BB.E7.83.A6 反斜杠的麻煩 在早期規定中&#xff0c;正則表達式用反斜杠字符 ("…

前端進階必備Node.js,你得了解一下

作為前端開發&#xff0c;工作中肯定離不開 JavaScript &#xff0c;而 Node.js 是基于 JavaScript 語言和 V8 引擎的 Web 服務器項目&#xff0c;讓你可以直接使用 JavaScript 來搭架服務器。而且在 Node 環境下&#xff0c;通過模塊化的 JavaScript 代碼&#xff0c;加上函數…

Google推出“Google實驗室” Ad Innovations

4月1日消息&#xff0c;據國外媒體報道&#xff0c;Google近日推出了Ad Innovations功能&#xff0c;類似于“Google實驗室”&#xff0c;但專門用于展示最新的廣告技術、方案等&#xff0c;并征求廣告主的反饋。 目前Ad Innovations已有數款新功能&#xff0c;Google將按照反饋…

JS中utf8和GBK的字符編碼轉換

1、PHP中的 json_encode 函數只限編碼UTF-8的數據&#xff0c;當轉換GBK或者GB2312等編碼的數據時&#xff0c;會將漢字轉為NULL。 2、JavaScript 中json 的使用&#xff1a; ① 將對象轉為json字符串&#xff1a;JSON.stringify(obj)② 將json轉為對象&#xff1a;dataObj ev…

tcptracerte參數_TCP/IP詳解學習筆記(4)-ICMP協議,ping和Traceroute【轉】

1.IMCP協議介紹前面講到了&#xff0c;IP協議并不是一個可靠的協議&#xff0c;它不保證數據被送達&#xff0c;那么&#xff0c;自然的&#xff0c;保證數據送達的工作應該由其他的模塊來完成。其中一個重要的模塊就是ICMP(網絡控制報文)協議。當傳送IP數據包發生錯誤&#xf…

[實踐系列]Promises/A+規范

前言 [實踐系列] 主要是讓我們通過實踐去加深對一些原理的理解。 實踐系列-前端路由 實踐系列-Babel原理 有興趣的同學可以關注 實踐系列 。 求star求follow~ 什么是Promise ? Promise是JS異步編程中的重要概念&#xff0c;異步抽象處理對象&#xff0c;是目前比較流行Javas…

Web Components 上手指南

現在的前端開發基本離不開 React、Vue 這兩個框架的支撐&#xff0c;而這兩個框架下面又衍生出了許多的自定義組件庫&#xff1a;Element&#xff08;Vue&#xff09;Ant Design&#xff08;React&#xff09;這些組件庫的出現&#xff0c;讓我們可以直接使用已經封裝好的組件&…

隱藏網頁文件的后綴(IIS測試通過)!

網上很多網站會看到如這樣的地址: /content?actadd&id1 /column?actedit&id2 原本是 /content.asp?actadd&id1 /column.asp?actedit&id2 這樣的效果就是在iis上做了下手腳&#xff0c;使用了rewrite重寫組件&#xff0c;就可以實現。 rewrite.rar轉載于:ht…