Ansible“調試”模塊


調試過程是開發軟件代碼的一個非常重要的部分。 Ansible 劇本也不例外。

為了在執行期間將變量或消息打印到終端輸出,Ansible 提供了一個名為“debug”的模塊。在開發劇本時,這是一個非常有用的實用程序。例如,它可以與“when:”指令一起使用,而不會在執行期間中斷劇本。

你涵蓋什麼?

在本教程中,您將了解 Ansible 的“調試模塊”。我們還將研究各種用例。讓我們開始。

前提條件

要運行本教程中顯示的示例,您需要以下內容:

1. Ansible 必須安裝在控制器節點上(本例中為 Ubuntu 20.04)。

2. 你應該對 Ansible 的用途以及如何編寫 playbook 有基本的了解(當然你需要知道什麼是 playbook)。

如果您是 Ansible 世界的新手,我建議您首先學習 Vagrant 以及如何使用它來設置基本的本地測試環境。 設置具有一個控制器節點和兩個目標節點的基本實驗後,您可以運行本指南中的示例。

調試模塊中使用的參數

該模塊有幾個參數。

1. msg:字符串類型參數,輸出自定義消息。

2. var:指定要調試的變量。 “msg”和“var”是互斥的。

3. 詳細程度:僅在執行調試操作後設置一個數字。例如,如果設置為 2,則僅在指定“-vv”時才會運行調試。

使用調試模塊的示例

1. 打印一個簡單的語句。

在最基本的用法中,調試模塊可用於將語句打印到輸出。創建一個包含以下內容的劇本“debug-demo.yml”:

---

- name: Ansible debug module basic example

hosts: web

tasks:

- name: Basic debug module message

debug:

msg: "LinuxHint Ansible"

要運行此劇本和後續劇本,請使用以下格式:

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

2. 輸出變量

除了在終端中打印基本語句外,還可以使用“調試”模塊來打印變量的值。以下示例在“my_vars.yml”文件中設置一個變量,並使用調試模塊的“msg”參數打印其值。

---

- hosts: web

vars_files:

- demo_vars.yml

tasks:

# Display "Variable ‘demo_var1’ is set to ‘demo_val1’".

- debug: msg="Variable ‘demo_var1’ is set to {{ demo_var1 }}"

上述劇本打印變量“demo_var1”的值以及“msg”參數中指定的消息。

同樣,您可以使用 playbook 中聲明的變量在 playbook 運行時打印到終端。

---

- hosts: web

vars:

my_var2: my_val2

tasks:

# This task displays "Variable ‘my_var2’ is set to ‘my_val2’".

- debug: msg="Variable ‘my_var2’ is set to {{ my_var2 }}"

前面的腳本在執行期間打印了變量“my_var2”。

3. 使用帶有寄存器變量的調試模塊

與前面的示例類似的方法也可以用於包含寄存器變量的調試模塊。現在讓我們創建另一個包含以下內容的劇本:

---

- hosts: all

gather_facts: no

become: false

tasks:

- name: Check the user name

ansible.builtin.shell: /usr/bin/whoami

register: login

- name: Display the user name using the output from previous task

debug: msg="Logged in as user {{ login.stdout }}"

之前的腳本有兩個任務。第一個任務指定運行 shell 命令的用戶名,並將該值保存在寄存器類型變量“login”中。 第二個任務在使用調試模塊的“msg”參數打印消息時使用此變量。

4. 使用具有“When”條件的調試模塊

在這種情況下,您可以設置一個條件,即只有滿足某些條件時調試模塊才會運行。創建一個包含以下內容的新劇本:

 

---

- hosts: all

gather_facts: yes

become: true

tasks:

- name: Checking the release information of the servers

ansible.builtin.command: /usr/bin/lsb_release -a

register: info

- name: Print the release information

debug: msg="The System information is as follows {{ info.stdout }}"

when: ansible_facts['distribution']=="Debian"

在前面的腳本中,我們使用“lsb_release -a”命令打印出系統版本信息。 “when”語句設置了“debug”模塊僅在操作系統發行版為 Debian 時才打印此信息的條件。

結論是

本指南通過一些示例解釋瞭如何使用調試模塊。正如您在給定示例中看到的,Ansible 的“調試”模塊對於主動調試操作非常有用。 從劇本中獲取詳細的輸出也很有幫助。