如何在 Ansible Playbook 中使用调试模块

在本指南中,我们将讨论什么是 Ansible 调试模块,调试模块中支持的参数是什么,最后如何使用调试模块以及 Ansible 剧本中的每个参数以及 Linux 中的示例。

如果您尚未设置 Ansible,请参阅以下指南。

  • 在 Linux 中安装和配置 Ansible
  • 在 Linux 中使用 Vagrant 和 Virtualbox 进行自动化 Ansible 实验室设置

什么是 Ansible 调试模块?

Ansible 调试模块用于在运行 playbook 时打印表达式和变量。 默认情况下,当您运行 playbook 时,您不会获得输出值,而是会获得状态(例如已更改、已忽略等)。 使用调试模块,您可以打印任何变量或表达式。 将此视为您在任何编程语言中的打印语句。

Debug 模块支持以下三个参数:

  1. 味精
  2. 变量
  3. 冗长

1. 带消息参数的调试模块

以下是将在本指南中使用的剧本的骨架。 根据您的环境更换主机。

- name: Working With debug module
  hosts: m2
  gather_facts: false

我创建了两个任务。 在这两种情况下,任务调试模块都通过 味精 范围。 两个任务之间的唯一区别是,在第一个任务中,msg 参数与模块名称 debug 出现在同一行中。 在第二个中,任务模块名称和 msg 参数位于单独的行中并且是预期的。

tasks:

    # Module and argument in the same line
    - name: First debug
      debug: msg="Hello OSTechnix Users"

    # Module and argument in separate line
    - name: Second debug
      debug: 
        msg: "You are looking at debug module guide"

您可以使用以下命令运行语法检查或运行 playbook。

$ ansible-playbook --syntax-check .yml
$ ansible-playbook .yml

这两个任务在运行 playbook 时都将消息打印到控制台,这可以从以下任务输出中验证。

TASK [First debug] ***********************************************************************************************************************************
ok: [rocky.anslab.com] => {
  "msg": "Hello OSTechnix Users"
}
​
TASK [Second debug] **********************************************************************************************************************************
ok: [rocky.anslab.com] => {
  "msg": "You are looking at debug module guide"
}

您还可以使用列表和字典值打印为消息。 值列表和字典映射的语法如下。

# List Line debug messages
    - name: List debug messages
      debug:
        msg:
          - India
          - Australia
          - Japan

    # Dictionary debug messages
    - name: Dict debug messages
      debug:
        msg:
          Country: India
          State: TN

看看下面的输出。 您可以看到输出是使用列表和字典的 python 语法表示打印的。

TASK [List debug messages] ***************************************************************************************************************************
ok: [rocky.anslab.com] => {
  "msg": [
      "India",
      "Australia",
      "Japan"
  ]
}
​
TASK [Dict debug messages] ***************************************************************************************************************************
ok: [rocky.anslab.com] => {
  "msg": {
      "Country": "India",
      "State": "TN"
  }
}

您还可以使用 味精 范围。 如果您查看下面的任务,我创建了两个名为 UBUNTU_VERSION释放. 我正在使用 msg 参数打印两个变量值。

    - name: Printing variable 
      vars:
        UBUNTU_VERSION: 22.04
        RELEASE: APRIL 2022
      debug:
        # msg: {{ UBUNTU_VERSION }} Latest version of Ubuntu is {{ UBUNTU_VERSION }} and it is releasing on {{ RELEASE }}
        msg: "{{ UBUNTU_VERSION }}"

输出:

TASK [Printing variable] *****************************************************************************************************************************
ok: [rocky.anslab.com] => {
    "msg": "Latest version of Ubuntu is 22.04 and it is releasing on APRIL 2022"
}

一个 很重要的一点 这里要注意的是,当你的变量名作为第一个单词时,你应该 用双引号将整行括起来. 总是建议 使用双引号 使用 msg 参数时。

msg: {{ UBUNTU_VERSION }} is releasing on {{ RELEASE }} # WILL FAIL
msg: "{{ UBUNTU_VERSION }} is releasing on {{ RELEASE }}" # ENCLOSED IN QUOTES

2.带var参数的调试模块

如果您希望像我们在上一节中所做的那样单独打印变量而不使用任何字符串,那么您可以使用 变量 参数并将变量名称作为参数传递。

使用 msg 模块时,应使用双花括号来打印变量值。 但是使用 var 参数,您可以只传递 不带任何大括号或引号的变量名.

    - name: Printing variable
      vars:
        UBUNTU_VERSION: 22.04
      debug:
        var: UBUNTU_VERSION

输出:

TASK [Using Var] *************************************************************************************************************************************
ok: [rocky.anslab.com] => {
   "UBUNTU_VERSION": 22.04
}

3. 带有详细参数的调试模块

Ansible 支持四级详细程度。 默认情况下,详细程度设置为零。 要打印消息,您必须使用 -v 旗帜。

$ ansible all -m shell -a "uptime" -v # LEVEL 1
$ ansible all -m shell -a "uptime" -vv # LEVEL 2
$ ansible all -m shell -a "uptime" -vvv # LEVEL 3
$ ansible all -m shell -a "uptime" -vvvv # LEVEL 4

当您运行 playbook 时,您可以使用调试模块设置任务的详细级别。 在这种情况下,您不会在终端中看到调试消息输出,除非您使用 -v 触发剧本时的标志。

    - name: Printing variable
      vars:
        UBUNTU_VERSION: 22.04
        RELEASE: APRIL 2022
      debug:
        var: UBUNTU_VERSION
      verbosity: 2

在上述任务中,我将详细级别设置为 2。 看看下面的输出,你可以看到输出被打印为这个任务的“跳过”。

$ ansible-playbook <playbook.yml>
​
TASK [Printing variable] *****************************************************************************************************************************
skipping: [rocky.anslab.com]

你可以通过 -v 标记到您的剧本。 它会告诉跳过的原因。

$ ansible-playbook <playbook.yml> -v
​
TASK [Printing variable] *****************************************************************************************************************************
skipping: [rocky.anslab.com] => {"skipped_reason": "Verbosity threshold not met."}

由于我已将详细程度设置为 2,因此我必须使用 -vv 标记以打印消息。 同样根据你在任务中设置的详细级别,你应该使用对应的级别 -v 运行剧本时标记。

$ ansible-playbook <playbook.yml> -vv
​
TASK [Printing variable] *****************************************************************************************************************************
task path: /home/vagrant/ansible_lab/vagrant_lab_sync/playbooks/2_debug_module/debug_with_verbosity.yml:8
ok: [rocky.anslab.com] => {
   "msg": "Latest version of Ubuntu is 22.04 and it is releasing on APRIL 2022"
}
META: ran handlers
META: ran handlers

结论

在本指南中,我们通过相应的示例了解了什么是 Ansible 调试模块、它是如何工作的以及如何在 Ansible 中使用调试模块。