ansible筆記(14) 迴圈(一)

2022-08-29 19:12:09 字數 2719 閱讀 5139

在使用ansible的過程中,我們經常需要處理一些返回資訊,而這些返回資訊中,通常可能不是單獨的一條返回資訊,而是乙個資訊列表,如果我們想要迴圈的處理資訊列表中的每一條資訊,我們該怎麼辦呢?這樣空口白話的描述有些費力,不如通過一些小示例,結合場景來描述。

以下是我的配置清單:

192.168.10.2

192.168.10.3

[group1]

192.168.10.10

[group2]

192.168.10.20

[group:children]

group1

group2

我想獲取配置清單中,沒有分組的主機名,如下所示:

[root@ansible-control ansible]# ansible 192.168.10.2 -m debug -a "msg=}"

192.168.10.2 | success =>

現在我想獲得未分組的主機名中第2臺主機的主機名資訊,如下所示:

注意[ ]裡面的標籤號計數是從0開始,第一台主機就是[0],第二台就是[1],依此類推

[root@ansible-control ansible]# ansible 192.168.10.2 -m debug -a "msg=}"

192.168.10.2 | success =>

但是問題是,我們通常不能確定返回資訊有幾條,我們可能需要迴圈的處理返回資訊中的每一條資訊,那麼怎麼才能迴圈處理返回資訊中的每一條資訊呢?示例playbook如下:

---

- hosts: 192.168.10.2

remote_user: root

gather_facts: no

tasks:

- debug:

msg: "}"

with_items: "}"

上例中,我們通過「}」獲取到了未分組的返回資訊,並使用關鍵字with_items接收了返回資訊,然後使用debug模組輸出了名為item變數的變數值,聰明如你一定已經明白了, with_items 關鍵字會把返回的列表資訊自動處理,將每一條資訊單獨放在乙個名為 item 的變數中,我們只要獲取到名為 item 變數的變數值,即可迴圈的獲取到列表中的每一條資訊,所以,上例中返回資訊中的每一條資訊都會迴圈的被debug模組處理,執行上述playbook後結果如下 :

從執行playbook的結果可以看出,debug模組對每條資訊都單獨輸出了一次,而不是三條資訊同時一次輸出,由於對應play是針對192.168.10.2主機操作的,所以上例中debug模組的三次操作都是在該主機上進行的,只不過debug模組只是輸出資訊,並不會對該主機做出什麼實際的改動而已,通過上述方法,就能夠符合我們迴圈操作的要求了。

上例中,我們使用的是返回值中的資訊,那麼我們能不能自定義乙個列表,然後迴圈使用列表中的值呢?必須能的,示例如下:

---

- hosts: 192.168.10.2

remote_user: root

gather_facts: no

tasks:

- debug:

msg: "}"

with_items:

- 1- 2

- 3

如上例所示,我們自定義了3個值,分別是1、2、3,debug模組會迴圈的輸出這三個值。

換一種寫法,和上面的效果等效:

---

- hosts: 192.168.10.2

remote_user: root

gather_facts: no

tasks:

- debug:

msg: "}"

with_items: [1,2,3]

定義一些稍微複雜的列表:

---

- hosts: 192.168.10.2

remote_user: root

gather_facts: no

tasks:

- debug:

msg: "}"

with_items:

- -

上例中自定義列表中的每乙個條目都是乙個物件,我們可以通過物件的屬性對應的  鍵  ,獲取到對應的   值   ,如上例所示,第乙個條目的test1鍵對應的值是a,第二個條目的test1鍵對應的值是c,所以執行上例playbook以後, a  和  c  會被輸出。

工作生產中使用迴圈的實際案例:

如果想要在同一主機中建立四個檔案,那麼你可能會編寫如下playbook:

---

- hosts: 192.168.10.2

remote_user: root

gather_facts: no

vars:

dirs:

- "/test/a"

- "/test/b"

- "/test/c"

- "/test/d"

tasks:

- file:

path: "}"

state: touch

with_items: "}"

awk學習筆記 14 迴圈

awk中的迴圈包括以下幾種 下面依次舉例說明 do while 建立dowhile.awk,內容如下 begin while data yynn 呼叫 awk f dowhile.awk 輸出 enter y or n 當輸出y或n的時候 大小寫均可 程式退出,其餘情況會要求再次輸入。while 建...

ansible學習筆記一 模組

公司內隨著機器使用的越來越多,按照之前的方式已經使用不便了,需要使用ansible批量管理了,這裡用測試例項驗證一次,做為學習筆記。因為自己筆記本效能問題,這裡只用兩台虛擬機器做測試 伺服器名 ipansible server 192.168.31.53 ansible client 192.168...

14 迴圈語句

本文是在學習js所做的學習筆記,所有筆記內容請看 js學習筆記 doctype html en utf 8 title title break 可以用來跳出for while 和switch 只對離其最近的有影響 continue 跳過當次迴圈,也是只能影響距離其最近的迴圈 如下,可以給外層迴圈起乙...