Ansible“调试”模块

调试过程是开发一段软件代码的一个非常关键的部分。 Ansible 剧本也不例外。

为了在执行期间在终端输出上打印变量或消息,Ansible 提供了一个名为“debug”的模块。 对于开发剧本来说,这是一个非常有益的实用程序。 为了 example,它可以与“when:”指令一起使用,并且在执行期间不会中断剧本。

我们将涵盖什么?

在本教程中,我们将了解 Ansible 中的“调试模块”。 我们还将了解各种用例。 让我们现在开始吧。

先决条件

要执行本教程中显示的示例,我们需要满足以下要求:

1. 你应该在控制器节点上安装了 Ansible(在我们的例子中是 Ubuntu 20.04)。

2.你应该对Ansible的目的是什么以及怎样编写剧本有一个基本的了解(当然你需要知道剧本是什么)。

如果您只是 Ansible 世界的初学者,我们建议您首先了解 Vagrant 以及怎样使用 Vagrant 设置基本的本地测试环境。 一旦设置了一个具有一个控制器节点和两个目标节点的基本实验室,您就可以执行本指南中的示例。

与调试模块一起使用的参数

该模块使用了几个参数:

1. msg:是字符串类型参数,打印自定义消息。

2. var:指定要调试的变量:“msg”和“var”互斥。

3. 详细程度:这仅设置调试操作运行之后的数字。 为了 example,如果设置为 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. 打印变量

除了在终端打印基本语句外,我们还可以使用“调试”模块来打印变量的值。 在下面的 example,我们在“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”在执行过程中被打印出来。

Ansible“调试”模块 1

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 }}"

Ansible“调试”模块 2

之前的剧本有两个任务。 第一个任务给出运行 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"

Ansible“调试”模块 3

在之前的剧本中,我们使用“lsb_release –a”命令来打印系统的发布信息。 “when”语句设置了一个条件,仅当操作系统发行版是 Debian 时才使用“debug”模块打印此信息。

结论

在本指南中,我们通过一些示例了解了怎样使用“调试”模块。 正如我们在给定示例中看到的,Ansible “调试”模块对于主动调试操作非常有用。 从剧本中获得详细的输出同样有帮助。