調試過程是開發軟件代碼的一個非常重要的部分。 Ansible 劇本也不例外。
為了在執行期間將變量或消息打印到終端輸出,Ansible 提供了一個名為“調試”的模塊。這是開發劇本的非常有用的實用程序。例如,它可以在“when:”指令中使用,並且在執行過程中不會中斷 playbook。
你涵蓋什麼?
在本教程中,您將了解 Ansible 的“調試模塊”。我們還將研究不同的用例。現在就開始。
先決條件
要運行本教程中顯示的示例,您需要以下內容:
1. Ansible 應安裝在控制器節點上(本例中為 Ubuntu 20.04)。
2. 你應該對 Ansible 的用途和如何編寫 playbook 有一個基本的了解(當然你需要知道 playbook 是什麼)。
如果您是 Ansible 世界的新手,我建議您先學習 Vagrant 以及如何使用它來設置基本的本地測試環境。 設置一個控制器節點和兩個目標節點的基本實驗室後,您可以運行本指南中的示例。
調試模塊使用的參數
該模塊使用一些參數。
1. msg:字符串類型參數,輸出自定義消息。
2. var:指定要調試的變量。 “msg”和“var”是互斥的。
3. Verbosity:僅在執行調試操作後設置數字。例如,如果設置為 2,調試將僅在指定“-vv”時運行。
使用調試模塊的示例
1.打印一個簡單的語句
在其最基本的用法中,調試模塊可用於將語句打印到輸出。創建具有以下內容的劇本“debug-demo.yml”:
--- - name: Ansible debug module basic example hosts: web tasks: - name: Basic debug module message debug: msg: "LinuxHint Ansible"
要運行此 playbook 和後續 playbook,請使用以下格式:
$ 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. 在“何時”條件下使用調試模塊
在這種情況下,您可以設置調試模塊僅在滿足某些條件時才運行的條件。創建一個包含以下內容的新劇本:
--- - 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"
在之前的playbook中,我們使用了’lsb_release -a’命令來輸出系統發布信息。 ‘when’ 語句設置了使用 ‘debug’ 模塊輸出此信息的條件,僅當操作系統發行版是 Debian 時。
結論是
本指南展示了幾個如何使用調試模塊的示例。正如您在給定示例中看到的,Ansible 的“調試”模塊對於主動調試操作非常有用。從劇本中獲取詳細的輸出也很有幫助。