关于playbook中变量,咱们先看看注册变量的应用场景:
- 在一台远端服务器上获取一个目录下的列表文件,然后下载这些文件.
- 在handler执行之后,发现前面一个task发生了changed(改变),然后执行一个指定的task.
- 获取远端服务器的ssh key的内容,构建出knows_hosts文件.
咱们在playbook中定义一个register变量---aaa,然后用debug打印出来.
- name: 10.0.0.2
hosts: 10.0.0.2
tasks:
- name: list /home
shell: ls /home
register: aaa
- debug:
var: aaa
看看结果
解释一下:
- "rc": 0 返回值是"0", 为"0" 则为真, 非"0" 则代表执行异常.
- "start" 一看就知道是时间(一看就懂).
- "stderr" 若执行报错则反馈报错信息.stderr_lines,哪一行出错.(因为这次是执行成功,所以没报错,为空)
- "stdout" 输出内容,和 stdout_lines一样,打印方式不一样,多一个\n表示换行.
我们知道,一个playbook中,执行报错变回终止,如果这个报错我们知道,还可以接受,并且希望继续完整的运行这个playbook.
怎么办呢?
咱们可以这样:先看看正常执行的
1 - name: 10.0.0.2
2 hosts: 10.0.0.2
3 tasks:
4 - name: list /home
5 shell: ls /home
6 register: aaa
7
8 - name: cat disk
9 shell: df -h
10 register: bbb
11
12 - debug:
13 var: aaa
14 var: bbb
咱们在中间在加一个,执行一个不存在的命令,比如查看一个没有的目录xxx,但是我们不希望查看的这个东西影响我们后续的执行.
- name: 10.0.0.2
hosts: 10.0.0.2
tasks:
- name: bar
shell: ls /xxx
resgister: bar
- debug:
var: bar
我们把这个错误的playbook插入到上一个.
- name: 10.0.0.2
hosts: 10.0.0.2
tasks:
- name: list /home
shell: ls /home
register: aaa- name: bar
shell: ls /xxx
register: bbb
ignore_errors: True- name: cat disk
shell: df -h
register: ccc- debug:
var: aaa- debug:
var: bbb- debug:
var: ccc
接着我们来执行一下
报错说找不到/xxx(我们也没有/xxx这个文件),但是不影响后面查看df -h.
最后,强烈建议大家实际手敲,发现自己的错误,这篇博客,本人不才,花了两小时,做这个实验,20分钟不到就能搞完,但是不顺利一直报错,然后排错,还好,发现问题了, debug不能一次写多个var,得分开, 冒号的中英文格式, 什么不起眼的地方掉了个空格...