`msg` 和 `var` 是 Ansible `debug` 模块最常用的两个参数,核心作用都是在执行过程中打印信息(调试/验证),但用法和场景完全不同,我用「大白话+案例」讲透区别和用法。

一、先看核心区别(一张表搞定)
| 特性         | `msg` 语句                          | `var` 语句                          |

| 核心作用 | 打印「自定义文本 + 变量值」         | 直接打印「变量的原始值」(无自定义文本) |
| 语法要求 | 必须用字符串(可拼接变量)          | 只能写变量名(不能加引号、不能拼接) |
| 输出格式 | 可读性强(自定义提示)              | 简洁(纯变量值,适合看复杂结构)    |
| 适用场景* | 打友好的提示信息、验证变量值      | 调试复杂变量(如 facts、注册的结果) |

二、msg 语句(最常用:自定义提示)
1. 基本用法:打印纯文本

- name: 打印简单提示
  debug:
    msg: "开始部署 Web 服务..."

输出:
TASK [打印简单提示] *************************************************
ok: [web01] => {
    "msg": "开始部署 Web 服务..."
}
 

2. 核心用法:拼接变量(最实用)
可以在 `msg` 里用 `{{ 变量 }}` 拼接变量值,让输出更有意义:
- name: 打印主机信息
  debug:
    msg: "主机 {{ ansible_facts['fqdn'] }} 的总内存是 {{ ansible_facts['memtotal_mb'] }} MiB"

输出:
ok: [web01] => {
    "msg": "主机 web01.example.com 的总内存是 7859 MiB"
}
 

三、var 语句(调试变量:看原始值)
1. 基本用法:打印单个变量
直接写变量名(不要加引号、不要加 `{{ }}`):
- name: 打印总内存变量
  debug:
    var: ansible_facts['memtotal_mb']

输出:
TASK [打印总内存变量] ***********************************************
ok: [web01] => {
    "ansible_facts['memtotal_mb']": 7859
}

2. 核心用法:调试复杂变量(比如注册的结果)
当变量是字典/列表(比如 `uri` 模块返回的结果、`setup` 模块的 facts),用 `var` 能清晰看到完整结构:
- name: 调用 API 并保存结果
  uri:
    url: https://api.example.com/health
    method: GET
  register: api_result

- name: 调试 API 返回结果
  debug:
    var: api_result  # 直接打印整个结果的原始结构

输出(简化版):
ok: [web01] => {
    "api_result": {
        "status": 200,
        "json": {"status": "healthy"},
        "content_length": "56"
    }
}
 

四、关键注意事项(新手必避坑)
1. var 不能加引号/拼接:
   ❌ 错误:`var: "主机名是 {{ ansible_hostname }}"`
   ✅ 正确:`var: ansible_hostname`

2. msg 必须用字符串:
   ❌ 错误:`msg: ansible_hostname`(会直接打印字符串 "ansible_hostname",不是变量值)
   ✅ 正确:`msg: "主机名是 {{ ansible_hostname }}"`

3. 复杂变量优先用 var:
   比如想查看 `ansible_facts` 的完整内容,用 `var: ansible_facts` 比 `msg: "{{ ansible_facts }}"` 更清晰(后者会把字典转成字符串,可读性差)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐