ansible循環


“Ansible 是 Red Hat Inc. 的一款開源工具,用於自動化許多 IT 基礎設施任務。有許多模塊可用於多個配置相關任務。

Ansible 是無代理的,安裝在稱為控制器的控制主機上。控制器的工作是通過 SSH 和其他支持的通信機制管理遠程機器。

循環對於一次執行多個任務很有用,例如創建多個用戶、安裝多個包或重複任務直到條件為真或假。

Ansible 在劇本中使用 YAML(YAML Ain’t Markup Language),一種數據序列化語言。 Ansible 代碼可以使用循環最小化。也就是說,迭代一個序列或映射。 “

你涵蓋什麼?

在本指南中,我們將探索 Ansible 中的循環,並查看一些在 playbook 中使用它們的具體示例。

先決條件

1. Ansible 基礎知識:劇本如何工作和運行。

2. 本指南中的實驗室:您可以使用 Vagrant 和 VirtualBox。

Ansible 循環

Ansible 提供了三個關鍵字來執行循環操作:loop、with_ 至。循環通常用於創建多個用戶、更改文件和目錄的所有權以及重複指令直到滿足條件。

標准或簡單循環

標準循環可用於遍歷可以直接在任務中定義的簡單字符串列表,如下所示。讓我們看一個簡單的例子。創建一個劇本。

$ nano my-playbook

- name: Add multiple users

hosts: managed1

become: yes

tasks:

- name: Add three users using Loops

user:

name: "{{ item }}"

state: present

loop:

- myuser1

- myuser2

在上面的劇本中,Ansible 使用循環在一個任務中創建多個用戶。此外,使用“用戶”模塊創建上述用戶。

循環的每次迭代都將列表值替換為 item 變量。

解釋腳本

  1. “用戶”模塊使用帶有“名稱”參數的變量 {{ item }},而不是直接指定名稱。
  2. 在“loop”關鍵字下方,您會看到要使用的用戶名。當 playbook 實際運行時,這些用戶名將替換 {{ item }}。
  3. 它只會在任務運行時出現一次,但您會在其下方看到三個更改。你馬上就知道了。

遍歷哈希表

您還可以使用循環來迭代哈希。例如,如果您需要將用戶分配到另一個附加組,您應該執行以下操作:

- username: my_user1

groups: production

- username: my_user2

groups: development

- username: my_user3

groups: staging

這裡的組已經存在於遠程機器上。只需使用循環將它們添加給用戶。

“用戶”模塊使用稱為“組”的可選參數來列出其他用戶。對於散列列表,您可以在循環內引用子鍵。為此,我們使用 {{ item }} 關鍵字。例如,考慮以下腳本片段。

- name: Add multiple users

hosts: managed1

become: yes

tasks:

- name: Add three users using Loops

ansible.builtin.user:

name: "{{ item.username }}"

state: present

groups: "{{ item.groups }}"

loop:

- { username: 'my_user1', groups: 'production' }

- { username: 'my_user2', groups: 'development' }

- { username: 'my_user3', groups: 'staging' }

帶條件的 Ansible 循環

條件語句可以在循環中使用以重複序列,直到條件為真。例如,“when”語句可用於此目的。在這種情況下,每個條件都由 Ansible 單獨處理。使用這種技術,您可以在某些項目中運行任務並在其他項目中跳過它們。例如,考慮:

tasks:

- name: Print numbers smaller than 46

ansible.builtin.command: echo {{ item }}

loop: [ 1, 5, 44, 56, 48, 9, 4 ]

when: item < 46

任務在運行時應輸出所有項目。這裡的數字小於 46 並將結果打印到終端。在這種情況下,完整的 my-playbook.yml 如下所示:

---

- hosts: all

gather_facts: yes

become: true

tasks:

- name: Print numbers smaller than 46

ansible.builtin.command: echo {{ item }}

loop: [ 1, 5, 44, 56, 48, 9, 4 ]

when: item < 46

使用以下命令運行 run playbook:

$ ansible-playbook my_playbook.yml -i /path/to/inventory/file

此處,對小於 46 的項目值執行 echo 命令;您可以在終端輸出中看到這一點。

結論是

在本指南中,您了解了 Ansible 循環並查看了各種用例。 有關“如何使用帶有字典、索引等的循環”的更多信息,請參閱 Ansible 官方文檔。

參考:

  1. https://www.ciscolive.com/c/dam/r/ciscolive/apjc/docs/2019/pdf/DEVWKS-2584.pdf