调试过程是开发一段软件代码的一个非常关键的部分。 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”在执行过程中被打印出来。
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”语句设置了一个条件,仅当操作系统发行版是 Debian 时才使用“debug”模块打印此信息。
结论
在本指南中,我们通过一些示例了解了如何使用“调试”模块。 正如我们在给定示例中看到的,Ansible “调试”模块对于主动调试操作非常有用。 从剧本中获得详细的输出同样有帮助。