一、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