ansible---playbook中变量

关于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,得分开,  冒号的中英文格式,    什么不起眼的地方掉了个空格...

发布了33 篇原创文章 · 获赞 4 · 访问量 3764

猜你喜欢

转载自blog.csdn.net/linux2422988311/article/details/100057900