“Ansible 是 Red Hat Inc. 的開源工具,用於自動化許多 IT 基礎架構任務。管理與配置相關的任務。
Ansible 是無代理的,安裝在稱為控制器的控制主機上。控制器的工作是通過 SSH 和其他支持的通信機制管理遠程機器。
循環對於一次執行多個任務非常有用,例如創建多個用戶、安裝多個包或重複任務直到條件為真或假。
Ansible 在劇本中使用 YAML(YAML 不是標記語言),一種數據序列化語言。 可以使用循環最小化 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 變量。
解釋腳本
- 在“user”模塊中,我沒有直接指定名稱,而是在“name”參數中使用了變量{{item}}。
- 在“循環”關鍵字下方,您會看到要使用的用戶名。當劇本實際運行時,這些用戶名將替換 {{ item }}。
- 它在執行任務時只列出一次,但下面列出了 3 個更改。你馬上就會知道。
遍歷哈希列表
您還可以使用循環來迭代散列。例如,如果您需要將用戶分配給另一個附加組,您應該這樣做:
- username: my_user1 groups: production - username: my_user2 groups: development - username: my_user3 groups: staging
這裡的組已經存在於遠程機器上。只需使用循環將它們添加到用戶即可。
“users”模塊使用一個名為“groups”的可選參數來列出其他用戶。哈希列表允許您在循環中引用子鍵。為此,我們使用 {{ 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的item值執行echo命令。這可以從終端輸出中驗證。
結論是
在本指南中,您了解了 Ansible 循環並看到了各種用例。 有關“如何對字典、索引等使用循環”的更多信息,請參閱官方 Ansible 文檔。
參考:
- https://www.ciscolive.com/c/dam/r/ciscolive/apjc/docs/2019/pdf/DEVWKS-2584.pdf