一、register 相关变量

在 Ansible 中,我们可以通过 register 捕获 task 的输出,并将它保存到一个变量中,方便在以后的任务中调用;

  • 必须以字母开头;
  • 只能包含字母,数字和下划线;


change: 表示执行命令的状态,如果命令执行了,则为 true;
cmd: 表示的则是你当前执行的命令;
delta: 表示命令执行所花费的时间
start: 表示命令开始执行的时间
end: 表示命令结束的时间
failed: 表示命令执行的结果,如果为 false 则表示命令执行成功,true 则表示命令执行失败
rc: 表示命令执行的返回码(return code),0 表示执行成功;
stderr:命令输出的标准错误信息
stderr_lines: 按换行符分割输出的内容,在多行输出时,显示的效果比 stderr 更加直观
stdout: 命令的标准输出信息
stdout_lines: 按换行符分割输出的内容,在多行输出时,结果更加直观
                        
举例:
# vim test.yaml
---
 - hosts: web1
   tasks:
   - shell: echo "hello ansible"
     register: echo_test
   - debug:
       var: echo_test

执行结果:
TASK [debug] ***********************************************************************************
ok: [ansible2] => {
    "echo_test": {
        "changed": true, 
        "cmd": "echo \"hello ansible\"", 
        "delta": "0:00:00.001956", 
        "end": "2024-05-22 20:31:16.045950", 
        "failed": false, 
        "rc": 0, 
        "start": "2024-05-22 20:31:16.043994", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "hello ansible", 
        "stdout_lines": [
            "hello ansible"
        ]
    }
}

二、rc变量

rc变量有0和1两种值,跟linux命令里面的echo $? 相似
rc == 0                                           代表成功
rc ==1或者rc !=0或者其他            代表失败

可以通过register关键字来将执行结果定义到某个变量中,然后再提取出此变量中rc变量对应的值来作为判断条件(也可以通过debug模块将执行结果显示出来)

---
- hosts: web1
  tasks:
  - name:
    shell: ls /yyds
    register: yyds
    ignore_errors: true
  - name:
    debug:
      var: yyds
  - name:
    debug:
      msg: "错误"
    when: yyds.rc != 0
  - name:
    debug:
      msg: "正确"
    when: yyds.rc == 0