- Ansible 教程
- Ansible - 首頁
- Ansible - 簡介
- Ansible - 環境設定
- Ansible - YAML 基礎
- Ansible - Ad hoc 命令
- Ansible - Playbook
- Ansible - 角色
- Ansible - 變數
- Ansible - 高階執行
- Ansible - 故障排除
- Ansible 有用資源
- Ansible - 快速指南
- Ansible - 有用資源
- Ansible - 討論
Ansible - 變數
Playbook 中的變數與在任何程式語言中使用變數非常相似。它可以幫助您使用和分配變數的值,並在 playbook 的任何地方使用它。您可以圍繞變數的值設定條件,並根據需要在 playbook 中使用它們。
示例
- hosts : <your hosts> vars: tomcat_port : 8080
在上面的示例中,我們定義了一個名為tomcat_port的變數,併為該變數分配了值 8080,可以在 playbook 中根據需要使用它。
現在參考共享的示例。以下程式碼來自其中一個角色(install-tomcat):
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
這裡,輸出是使用的變數。
讓我們一起了解上面程式碼中使用的所有關鍵字:
block - Ansible 語法,用於執行給定的程式碼塊。
name - 程式碼塊的相關名稱 - 這用於日誌記錄,並有助於除錯哪些程式碼塊已成功執行。
action - action 標籤後面的程式碼是要執行的任務。action 也是 yaml 中使用的 Ansible 關鍵字。
register - 使用 register 關鍵字註冊 action 的輸出,Output 是儲存 action 輸出的變數名稱。
always - 也是 Ansible 關鍵字,它表示下面將始終執行。
msg - 顯示訊息。
變數用法 - {{Output}}
這將讀取變數 Output 的值。由於它在 msg 標籤中使用,因此它將列印輸出變數的值。
此外,您還可以使用變數的子屬性。例如,在檢查 {{Output.changed}} 時,檢查輸出是否已更改,並相應地使用它。
Playbook 中的異常處理
Ansible 中的異常處理類似於任何程式語言中的異常處理。Playbook 中的異常處理示例如下所示。
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
以下是異常處理的語法。
rescue 和 always 是特定於異常處理的關鍵字。
Block 是編寫程式碼的地方(在 Unix 機器上執行的任何內容)。
如果 block 功能內編寫的命令失敗,則執行將到達 rescue 程式碼塊並執行它。如果 block 功能下的命令沒有錯誤,則不會執行 rescue。
Always 在所有情況下都會執行。
因此,如果我們將其與 Java 進行比較,則它類似於 try、catch 和 finally 程式碼塊。
這裡,Block 類似於try 程式碼塊,您可以在其中編寫要執行的程式碼,rescue 類似於catch 程式碼塊,always 類似於finally。
迴圈
以下是演示 Ansible 中迴圈用法的示例。
任務是將所有 war 檔案從一個目錄複製到 tomcat webapps 資料夾。
下面示例中使用的大多數命令之前已經介紹過了。在這裡,我們將重點關注迴圈的用法。
最初在 'shell' 命令中,我們執行了 ls *.war。因此,它將列出目錄中的所有 war 檔案。
該命令的輸出儲存在名為 output 的變數中。
要迴圈,使用了 'with_items' 語法。
with_items: "{{output.stdout_lines}}" --> output.stdout_lines 為我們提供了逐行輸出,然後我們使用 Ansible 的 with_items 命令在輸出上迴圈。
附加示例輸出只是為了讓大家瞭解如何在 with_items 命令中使用 stdout_lines。
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls *.war"
register: output
args:
chdir: /opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
程式碼塊
Playbook 總體上被分解成程式碼塊。要執行的步驟的最小部分寫在程式碼塊中。將特定指令寫入程式碼塊有助於隔離功能,並在需要時使用異常處理來處理它。
變數用法、異常處理和迴圈中上面已經介紹了程式碼塊的示例。
條件語句
條件語句用於根據條件執行特定步驟。
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
在這種情況下,將列印 Equals,因為 test1 變數與 when 條件中提到的內容相等。when 可以與邏輯 OR 和邏輯 AND 條件一起使用,就像在所有程式語言中一樣。
只需將 test1 變數的值從 Hello Vivek 更改為 Hello World 並檢視輸出即可。