You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ansible控制台的Changed/ok状态输出保存至变量?

问题描述

我有如下Ansible控制台输出:

TASK [Run Ping Command] *********************************
Changed: [HostName]

TASK [Add Ping Command Results to Log] *********************************
ok: [HostName]

请问怎么把输出里的Changed: [HostName]和ok: [HostName]这类状态信息保存到变量里?我试过用register:,但它只保存了命令的输出内容,没保存控制台显示的Changed、ok这些状态标识。

解决方法

  • Ansible的register捕获的任务结果是结构化数据,状态信息存在注册变量的属性中,而非直接存储控制台字符串:

    • 任务状态为changed时,注册变量的changed属性值为true
    • 任务状态为ok时,changed属性值为false
    • 额外还可通过failed属性判断任务是否失败,skipped属性判断任务是否被跳过
  • 实际示例:

    - name: Run Ping Command
      ping:
      register: ping_result
    
    - name: 输出任务状态
      debug:
        msg: "任务状态: {{ 'Changed' if ping_result.changed else 'ok' }}: [{{ inventory_hostname }}]"
    

    这里通过ping_result.changed判断状态,拼接后就能得到和控制台格式一致的内容,也可直接将拼接结果存入新变量。

  • 若要直接生成目标格式的字符串变量,可使用set_fact:

    - set_fact:
        ping_task_status: "{{ 'Changed' if ping_result.changed else 'ok' }}: [{{ inventory_hostname }}]"
    

    执行后ping_task_status变量就会存储Changed: [HostName]或ok: [HostName]这类内容。

内容的提问来源于stack exchange,提问作者uncowandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:10:49